【问题标题】:Bootstrap 3 Carousel fading to new slide instead of sliding to new slideBootstrap 3 Carousel 淡入新幻灯片而不是滑动到新幻灯片
【发布时间】:2013-08-31 13:34:11
【问题描述】:

我正在使用未修改的 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 -->

bootstrap 3 中的默认 css:

.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 个动画,它会向左滑动并改变不透明度。..

你能帮帮我吗?

【问题讨论】:

  • 您必须在 bootstrap 中编辑 carousel.js 文件以获得淡入淡出效果,因为滑动是默认设置,并且没有可以传入的淡入淡出选项。
  • @user2606561 请注明最佳答案... gerardnll 的答案不需要任何库,只需添加代码

标签: twitter-bootstrap


【解决方案1】:

由于更改,从 3.2.x 到 3.3.x 的更新破坏了此处和其他线程中解释的一些解决方案:“添加了转换以提高现代浏览器中的轮播性能。” p>

如果您使用的是 Bootstrap 3.3.x,这里有一个解决方案:
http://codepen.io/transportedman/pen/NPWRGq

基本上你需要将“carousel-fade”类添加到你的轮播中,这样你就有了:
&lt;div class="carousel slide carousel-fade"&gt;

然后包含以下 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);
    }
}

【讨论】:

  • 谢谢@gerardnll,这正是我想要的。已添加完整代码 sn-p 以方便参考。
  • 谢谢!这似乎对我有用。但是如何改变淡入淡出时间呢?
  • 如果添加“transform:none;” (及其前缀版本)到您的第三条和第四条规则,您可以摆脱整个媒体查询。
  • 要调整transition-duration,请在.item 规则中指定:例如.carousel-fade .carousel-inner .item { ...; transition-duration: 2s}。我必须承认,bootstrap 3.2 中的过渡比 3.3 中的要平滑得多。不过,我需要更深入地研究它。我坚持使用 3.2,直到我整理出来。
  • 另外值得注意的是,您需要 slide 类才能使其工作。在 JS 中检查这个类。找到这个例子:codepen.io/transportedman/pen/NPWRGq
【解决方案2】:

这可以仅使用 CSS 来完成。要将轮播更改为淡入淡出过渡而不是幻灯片,请使用以下 sn-ps(LESS 或标准 CSS)中的一个

// 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;
}

【讨论】:

  • 我可以确认,这里的纯 CSS 解决方案在覆盖引导标题为它们制作 css 动画时也可以工作,工作非常流畅并且非常有效。
  • 此答案不适用于 BS3.1。我找到了正确的:codepen.io/Rowno/pen/Afykb
  • 它似乎工作正常,但它会逐渐消失。我试图改变时间,但似乎什么也没发生。褪色时间几乎是瞬间的……我需要一些更平滑的东西。你能帮帮我吗?
  • 这个答案很好,但奇怪的是它在开发模式下工作,而不是在生产中,有什么想法吗? @JoeConlin
【解决方案3】:

一些很好的答案,但我尝试过的所有解决方案的问题是图像不会相互淡入。相反,第一个完全淡出,然后下一个淡入。

经过几个小时的测试,发现了这个解决方案。 谢谢http://www.1squarepear.com/adding-a-responsive-bootstrap-image-carousel-that-fades-instead-of-slides/

  1. 在 HTML 代码中,将 .carousel 元素上的 .slide 更改为 .fade
  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; }

【讨论】:

  • 漂亮而简单的 css 解决方案,正是我所需要的。
  • 太棒了,你帮我省了挖另一个插件,非常感谢
  • 少数几次我需要复制/粘贴解决方案来进行绝望的快速修复 - 谢谢 - 我的大脑已经放弃了这个晚上!
【解决方案4】:

您可以仅使用 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;
}

【讨论】:

    【解决方案5】:

    对于 bootstrap 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;
    }
    

    【讨论】:

      【解决方案6】:

      您可以在 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;
      }

      【讨论】:

        【解决方案7】:

        我使用了普通的 .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;
        }
        

        【讨论】:

        • 我意识到这是一个迟到的评论,但为了其他开发人员阅读本文,修改任何 3rd 方库都是不好的做法。相反,您应该“覆盖”您自己的 css 文件中的样式。
        【解决方案8】:

        在回复gerardnll 的回答中,通过淡化效果扩展 Bootstrap 3.3.x 轮播的 Less 代码:

        //
        // 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);
                        }
                    }
        
                }
        
            }
        
        }
        

        唯一的问题是过渡持续时间超过 0.8 秒(大约)时无法按预期工作。也许有人有解决这种奇怪行为的方法。

        注意: LESS 代码有.transition-duration(.8s); 注释,因此使用默认轮播过渡持续时间。您可以玩价值并查看效果。较长的持续时间 (> 0.8) 会使淡入淡出效果不太平滑。

        【讨论】:

        • 能否请您详细说明您的答案,添加更多关于您提供的解决方案的描述?
        【解决方案9】:

        看看这个: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;
            }
        }
        

        效果很好,我希望它有效

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-09-25
          • 2013-02-05
          • 2015-07-17
          • 2016-09-26
          • 2021-04-15
          • 1970-01-01
          • 2011-09-17
          相关资源
          最近更新 更多