2013-08-31 62 views
56

我正在使用未經修改的Bootstrap 3。Bootstrap 3轉盤淡入淡出而不是滑入新的幻燈片

這裏的

<!-- Carousel 
================================================== --> 
<div id="myCarousel" class="carousel slide"> 
    <!-- Indicators --> 
    <ol class="carousel-indicators"> 
    <li data-target="#myCarousel" data-slide-to="0" class="active"></li> 
    <li data-target="#myCarousel" data-slide-to="1"></li> 
    </ol> 
    <div class="carousel-inner"> 
    <div class="item active carousel-1"> 
     <div class="container"> 
     <div class="carousel-caption"> 
      <h1>Example headline.</h1> 
      <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> 
      <p><a class="btn btn-large btn-primary" href="#">Sign up today</a></p> 
     </div> 
     </div> 
    </div> 
    <div class="item carousel-2"> 
     <div class="container"> 
     <div class="carousel-caption"> 
      <h1>Another example headline.</h1> 
      <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> 
      <p><a class="btn btn-large btn-primary" href="#">Learn more</a></p> 
     </div> 
     </div> 
    </div> 

    </div> 
    <a class="left carousel-control" href="#myCarousel" data-slide="prev"><span class="glyphicon glyphicon-chevron-left"></span></a> 
    <a class="right carousel-control" href="#myCarousel" data-slide="next"><span class="glyphicon glyphicon-chevron-right"></span></a> 
</div><!-- /.carousel --> 

默認CSS從引導3:

.carousel { 
    position: relative; 
} 

.carousel-inner { 
    position: relative; 
    width: 100%; 
    overflow: hidden; 
} 

.carousel-inner > .item { 
    position: relative; 
    display: none; 
    -webkit-transition: 0.6s ease-in-out left; 
      transition: 0.6s ease-in-out left; 
} 

.carousel-inner > .item > img, 
.carousel-inner > .item > a > img { 
    display: block; 
    height: auto; 
    max-width: 100%; 
    line-height: 1; 
} 

.carousel-inner > .active, 
.carousel-inner > .next, 
.carousel-inner > .prev { 
    display: block; 
} 

.carousel-inner > .active { 
    left: 0; 
} 

.carousel-inner > .next, 
.carousel-inner > .prev { 
    position: absolute; 
    top: 0; 
    width: 100%; 
} 

.carousel-inner > .next { 
    left: 100%; 
} 

.carousel-inner > .prev { 
    left: -100%; 
} 

.carousel-inner > .next.left, 
.carousel-inner > .prev.right { 
    left: 0; 
} 

.carousel-inner > .active.left { 
    left: -100%; 
} 

.carousel-inner > .active.right { 
    left: 100%; 
} 

.carousel-control { 
    position: absolute; 
    top: 0; 
    bottom: 0; 
    left: 0; 
    width: 15%; 
    font-size: 20px; 
    color: #ffffff; 
    text-align: center; 
    text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); 
    opacity: 0.5; 
    filter: alpha(opacity=50); 
} 

.carousel-control.left { 
    background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.0001))); 
    background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.5) 0), color-stop(rgba(0, 0, 0, 0.0001) 100%)); 
    background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%); 
    background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%); 
    background-repeat: repeat-x; 
    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); 
} 

.carousel-control.right { 
    right: 0; 
    left: auto; 
    background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.0001)), to(rgba(0, 0, 0, 0.5))); 
    background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.0001) 0), color-stop(rgba(0, 0, 0, 0.5) 100%)); 
    background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%); 
    background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%); 
    background-repeat: repeat-x; 
    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); 
} 

.carousel-control:hover, 
.carousel-control:focus { 
    color: #ffffff; 
    text-decoration: none; 
    opacity: 0.9; 
    filter: alpha(opacity=90); 
} 

.carousel-control .icon-prev, 
.carousel-control .icon-next, 
.carousel-control .glyphicon-chevron-left, 
.carousel-control .glyphicon-chevron-right { 
    position: absolute; 
    top: 50%; 
    left: 50%; 
    z-index: 5; 
    display: inline-block; 
} 

.carousel-control .icon-prev, 
.carousel-control .icon-next { 
    width: 20px; 
    height: 20px; 
    margin-top: -10px; 
    margin-left: -10px; 
    font-family: serif; 
} 

.carousel-control .icon-prev:before { 
    content: '\2039'; 
} 

.carousel-control .icon-next:before { 
    content: '\203a'; 
} 

.carousel-indicators { 
    position: absolute; 
    bottom: 10px; 
    left: 50%; 
    z-index: 15; 
    width: 60%; 
    padding-left: 0; 
    margin-left: -30%; 
    text-align: center; 
    list-style: none; 
} 

.carousel-indicators li { 
    display: inline-block; 
    width: 10px; 
    height: 10px; 
    margin: 1px; 
    text-indent: -999px; 
    cursor: pointer; 
    border: 1px solid #ffffff; 
    border-radius: 10px; 
} 

.carousel-indicators .active { 
    width: 12px; 
    height: 12px; 
    margin: 0; 
    background-color: #ffffff; 
} 

.carousel-caption { 
    position: absolute; 
    right: 15%; 
    bottom: 20px; 
    left: 15%; 
    z-index: 10; 
    padding-top: 20px; 
    padding-bottom: 20px; 
    color: #ffffff; 
    text-align: center; 
    text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); 
} 

.carousel-caption .btn { 
    text-shadow: none; 
} 

@media screen and (min-width: 768px) { 
    .carousel-control .icon-prev, 
    .carousel-control .icon-next { 
    width: 30px; 
    height: 30px; 
    margin-top: -15px; 
    margin-left: -15px; 
    font-size: 30px; 
    } 
    .carousel-caption { 
    right: 20%; 
    left: 20%; 
    padding-bottom: 30px; 
    } 
    .carousel-indicators { 
    bottom: 20px; 
    } 
} 

一些CSS,我已經增加:

.carousel { 
    height: 500px; 
} 
.carousel-inner { 
    height: 100%; 
} 

.carousel-1 { 
    height: 100%; 
    background: url(../images/carousel1.jpg) no-repeat center center fixed; 
    -webkit-background-size: cover; 
    background-size: cover; 
} 

.carousel-2 { 
    height: 100%; 
    background: url(../images/carousel2.jpg) no-repeat center center fixed; 
    -webkit-background-size: cover; 
    background-size: cover; 
} 

,但我無法弄清楚如何我可以這種旋轉木馬具有褪色效果。 我試圖將不透明度從1更改爲0,但當它顯示有效的項目時,它會顯示2個動畫,它會向左滑動並更改不透明度。

您能幫助我嗎?

+0

你必須在bootstrap中編輯carousel.js文件以獲得淡化效果,因爲滑動是默認設置,並且沒有可供您傳入的淡入淡出選項。 – Patrick

+0

@ user2606561 ple最好的答案... gerardnll的答案不需要任何觸摸庫,只需添加代碼 – webMan

回答

42

這隻能使用CSS來完成。要將輪播更改爲淡入淡出而不是幻燈片,請使用一個以下片段(LESS或標準CSS)。

LESS

// Fade transition for carousel items 
.carousel { 
    .item { 
    left: 0 !important; 
    .transition(opacity .4s); //adjust timing here 
    } 
    .carousel-control { 
    background-image: none; // remove background gradients on controls 
    } 
    // Fade controls with items 
    .next.left, 
    .prev.right { 
    opacity: 1; 
    z-index: 1; 
    } 
    .active.left, 
    .active.right { 
    opacity: 0; 
    z-index: 2; 
    } 
} 

純CSS:

/* Fade transition for carousel items */ 
.carousel .item { 
    left: 0 !important; 
     -webkit-transition: opacity .4s; /*adjust timing here */ 
     -moz-transition: opacity .4s; 
      -o-transition: opacity .4s; 
       transition: opacity .4s; 
} 
.carousel-control { 
    background-image: none !important; /* remove background gradients on controls */ 
} 
/* Fade controls with items */ 
.next.left, 
.prev.right { 
    opacity: 1; 
    z-index: 1; 
} 
.active.left, 
.active.right { 
    opacity: 0; 
    z-index: 2; 
} 
+1

我可以確認這裏的普通CSS解決方案也適用於覆蓋引導標題爲他們製作css動畫時,作品真正平滑並且非常有效。 – christoshrousis

+4

此答案不適用於BS3.1。 我找到了正確的一個:http://codepen.io/Rowno/pen/Afykb –

+3

它似乎工作正常,但它安裝淡出。我嘗試改變時機,但似乎沒有任何事情發生。褪色時間幾乎是瞬間的..我需要更平滑的東西。你能幫我嗎? –

7

可以實現淡入淡出效果(而不是用默認的滑粘)只使用CSS。 這些添加到您的樣式表

.carousel .item { 
    -webkit-transition: opacity 3s; 
    -moz-transition: opacity 3s; 
    -ms-transition: opacity 3s; 
    -o-transition: opacity 3s; 
    transition: opacity 3s; 
} 
.carousel .active.left { 
    left:0;opacity:0;z-index:2; 
} 
.carousel .next { 
    left:0;opacity:1;z-index:1; 
} 
1

我用普通的CSS。它效果很好。請注意,我刪除從bootstrap.min.css如下:

/* Fade transition for carousel items */ 

.carousel .item { 
    left: 0 !important; 
    -webkit-transition: opacity .4s; 
    /*adjust timing here */ 
    -moz-transition: opacity .4s; 
    -o-transition: opacity .4s; 
    transition: opacity .4s; 
} 

.carousel-control { 
    background-image: none !important; 
    /* remove background gradients on controls */ 
} 

/* Fade controls with items */ 

.next.left, .prev.right { 
    opacity: 1; 
    z-index: 1; 
} 

.active.left, .active.right { 
    opacity: 0; 
    z-index: 2; 
} 
+1

我意識到這是一個遲到的評論,但爲了讀其他開發者的緣故,修改任何第三方庫是不好的做法。相反,你應該在你自己的css文件中「覆蓋」樣式。 –

87

從3.2.x中到3.3.x更新打破了一些解決方案,這裏解釋以及由​​於變化的其他線程:「添加轉換以提高現代瀏覽器中的輪播性能

如果您使用的是Bootstrap 3.3。X這裏有一個解決方案:
http://codepen.io/transportedman/pen/NPWRGq

基本上你需要的「旋轉木馬變臉」類添加到您的旋轉木馬,讓您有:
<div class="carousel slide carousel-fade">

然後包括以下CSS:

/* 
    Bootstrap Carousel Fade Transition (for Bootstrap 3.3.x) 
    CSS from:  http://codepen.io/transportedman/pen/NPWRGq 
    and:   http://stackoverflow.com/questions/18548731/bootstrap-3-carousel-fading-to-new-slide-instead-of-sliding-to-new-slide 
    Inspired from: http://codepen.io/Rowno/pen/Afykb 
*/ 
.carousel-fade .carousel-inner .item { 
    opacity: 0; 
    transition-property: opacity; 
} 

.carousel-fade .carousel-inner .active { 
    opacity: 1; 
} 

.carousel-fade .carousel-inner .active.left, 
.carousel-fade .carousel-inner .active.right { 
    left: 0; 
    opacity: 0; 
    z-index: 1; 
} 

.carousel-fade .carousel-inner .next.left, 
.carousel-fade .carousel-inner .prev.right { 
    opacity: 1; 
} 

.carousel-fade .carousel-control { 
    z-index: 2; 
} 

/* 
    WHAT IS NEW IN 3.3: "Added transforms to improve carousel performance in modern browsers." 
    Need to override the 3.3 new styles for modern browsers & apply opacity 
*/ 
@media all and (transform-3d), (-webkit-transform-3d) { 
    .carousel-fade .carousel-inner > .item.next, 
    .carousel-fade .carousel-inner > .item.active.right { 
     opacity: 0; 
     -webkit-transform: translate3d(0, 0, 0); 
       transform: translate3d(0, 0, 0); 
    } 
    .carousel-fade .carousel-inner > .item.prev, 
    .carousel-fade .carousel-inner > .item.active.left { 
     opacity: 0; 
     -webkit-transform: translate3d(0, 0, 0); 
       transform: translate3d(0, 0, 0); 
    } 
    .carousel-fade .carousel-inner > .item.next.left, 
    .carousel-fade .carousel-inner > .item.prev.right, 
    .carousel-fade .carousel-inner > .item.active { 
     opacity: 1; 
     -webkit-transform: translate3d(0, 0, 0); 
       transform: translate3d(0, 0, 0); 
    } 
} 
+1

謝謝@gerardnll,那正是我所期待的。已添加完整的代碼片段以供參考。 –

+2

這節省了我的屁股! – Johann

+2

謝謝!這似乎對我有用。 但你如何改變淡入淡出時間? – saicode

1

自舉3,這是我用過

.carousel-fade .carousel-inner .item { 
    opacity: 0; 
    -webkit-transition-property: opacity; 
    -moz-transition-property: opacity; 
    -o-transition-property: opacity; 
    transition-property: opacity; 
} 
.carousel-fade .carousel-inner .active { 
    opacity: 1; 
} 
.carousel-fade .carousel-inner .active.left, 
.carousel-fade .carousel-inner .active.right { 
    left: 0; 
    opacity: 0; 
    z-index: 1; 
} 
.carousel-fade .carousel-inner .next.left, 
.carousel-fade .carousel-inner .prev.right { 
    opacity: 1; 
} 
.carousel-fade .carousel-control { 
    z-index: 2; 
} 
0

檢查了這一點:http://codepen.io/Rowno/pen/Afykb

.carousel-fade { 
    .carousel-inner { 
     .item { 
      opacity: 0; 
      transition-property: opacity; 
     } 

    .active { 
     opacity: 1; 
    } 

    .active.left, 
    .active.right { 
     left: 0; 
     opacity: 0; 
     z-index: 1; 
    } 

    .next.left, 
    .prev.right { 
     opacity: 1; 
    } 
} 

作品奇妙,我希望它的工作原理

1

在回答gerardnll的回答更少的代碼以淡入淡出效果,延長引導3.3.x旋轉木馬:

// 
// Carousel Fade effect 
// -------------------------------------------------- 

// inspired from http://codepen.io/Rowno/pen/Afykb 
.carousel-fade { 

    .carousel-inner { 
     .item { 
      .opacity(0); 
      .transition-property(opacity); 
      //.transition-duration(.8s); 
     } 

     .active { 
      .opacity(1); 

      &.left, 
      &.right { 
       left: 0; 
       .opacity(0); 
       z-index: 1; 
      } 
     } 

     .next.left, 
     .prev.right { 
      .opacity(1); 
     } 
    } 

    .carousel-control { 
     z-index: 2; 
    } 
} 

// WHAT IS NEW IN 3.3: 
// "Added transforms to improve carousel performance in modern browsers." 
// now override the 3.3 new styles for modern browsers & apply opacity 
@media all and (transform-3d), (-webkit-transform-3d) { 

    .carousel-fade { 

     .carousel-inner { 

      > .item { 
       &.next, 
       &.prev, 
       &.active.right, 
       &.active.left { 
        .opacity(0); 
        .translate3d(0; 0; 0); 
       } 

       &.next.left, 
       &.prev.right, 
       &.active { 
        .opacity(1); 
        .translate3d(0; 0; 0); 
       } 
      } 

     } 

    } 

} 

唯一的問題是當時間超過.8s(大約)時,轉換持續時間不能按預期工作。也許有人有解決方案來解決這種奇怪的行爲。

注意: LESS代碼有.transition-duration(.8s);註釋,因此使用默認輪播過渡時間。你可以玩這個值並看看效果。持續時間更長(> 0.8)會使淡化效果不那麼流暢。

+0

請您詳細說明您的答案,並增加關於您提供的解決方案的更多描述? – abarisone

2

您可以使用CSS3過渡:

.carousel-fade .carousel-inner .item { 
 
    -webkit-transition-property: opacity; 
 
    transition-property: opacity; 
 
} 
 
.carousel-fade .carousel-inner .item, 
 
.carousel-fade .carousel-inner .active.left, 
 
.carousel-fade .carousel-inner .active.right { 
 
    opacity: 0; 
 
} 
 
.carousel-fade .carousel-inner .active, 
 
.carousel-fade .carousel-inner .next.left, 
 
.carousel-fade .carousel-inner .prev.right { 
 
    opacity: 1; 
 
} 
 
.carousel-fade .carousel-inner .next, 
 
.carousel-fade .carousel-inner .prev, 
 
.carousel-fade .carousel-inner .active.left, 
 
.carousel-fade .carousel-inner .active.right { 
 
    left: 0; 
 
    -webkit-transform: translate3d(0, 0, 0); 
 
      transform: translate3d(0, 0, 0); 
 
} 
 
.carousel-fade .carousel-control { 
 
    z-index: 2; 
 
}

15

一些很好的答案,但我已經嘗試了所有的解決方案的問題是圖像doesn't褪色相互轉化。相反,第一個完全消失,並且比下一個淡入。

經過幾個小時的測試發現這種溶劑。 THX到http://www.1squarepear.com/adding-a-responsive-bootstrap-image-carousel-that-fades-instead-of-slides/

  1. 在從.slide的HTML代碼更改爲.fade的.carousel元素
  2. 在css中添加此:

    .carousel.fade { opacity: 1; } .carousel.fade .item { transition: opacity ease-out .7s; left: 0; opacity: 0; /* hide all slides */ top: 0; position: absolute; width: 100%; display: block; } .carousel.fade .item:first-child { top: auto; opacity: 1; /* show first slide */ position: relative; } .carousel.fade .item.active { opacity: 1; }

+1

這已經解決了我的問題,謝謝! – Dandy

+0

好的&簡單的css解決方案,正是我需要的。 –

+0

輝煌的,你救了我挖掘另一個插件,非常感謝你 –