【问题标题】:Bootstrap Carousel - how to fade between slides slowlyBootstrap Carousel - 如何在幻灯片之间慢慢淡出
【发布时间】:2015-03-20 15:11:13
【问题描述】:

我正在使用最新的 Bootstrap Carousel,需要在幻灯片之间慢慢淡出(大约 5 秒)。我查看了许多示例,并尝试实现此one。问题是幻灯片之间的渐变太快(不到一秒)。如何将其更改为更长的渐变?

这是我的代码:

<div class="carousel slide" id="slideshow-carousel-1" data-ride="carousel">
    <div class="carousel-inner" role="listbox">
        <!-- Slide 1 -->
        <div class="item item-1 slide-image active">
            <img class="img-responsive bg-item parallax" data-speed="1" data-width="1980" data-height="1485" src="~/images/slideshow/bottle1.png" alt="Slide 1 Background">
            <div class="carousel-caption">
                <h1 class="title">Caption 1</h1>
            </div>
        </div>
        <!-- End Slide 1 -->

        <!-- Slide 2 -->
        <div class="item item-2 slide-image">
            <img class="img-responsive bg-item parallax" data-speed="1" data-width="1980" data-height="1485" src="~/images/slideshow/bottle2.jpg" alt="Slide 2 Background">
            <div class="carousel-caption">
                <h1 class="title">Or Bottle!</h1>
            </div>
        </div>
        <!-- End Slide 2 -->
    </div>
</div>

这是 CSS:

.carousel-inner > .item {
  opacity: 0;
  top: 0;
  left: 0;
  width: 100%;
  display: block;
  position: absolute;
  z-index: 0;
  -webkit-transition: opacity 5s ease;
       -o-transition: opacity 5s ease;
          transition: opacity 5s ease;
  -webkit-transform: translate3d(0, 0, 0) !important;
          transform: translate3d(0, 0, 0) !important;
}
.carousel-inner > .item:first-of-type {
  position: relative;
}
.carousel-inner > .active {
  opacity: 1;
  z-index: 3;
}
.carousel-inner > .next.left,
.carousel-inner > .prev.right {
  -webkit-transition: opacity 0.6s ease-in-out;
       -o-transition: opacity 0.6s ease-in-out;
          transition: opacity 0.6s ease-in-out;
  opacity: 1;
  left: 0;
  z-index: 2;
}
.carousel-inner > .active.left,
.carousel-inner > .active.right {
  z-index: 1;
}
.carousel-control {
  z-index: 4;
}

【问题讨论】:

  • 您是否尝试将transition: opacity 0.6s ease-in-out; 更改为更长的持续时间?
  • 我做了,但不管什么原因都没有影响。
  • 我(个人)不是引导程序的粉丝;但是您是否右键单击已查看的页面检查器以查看是否有覆盖过渡的 css 属性?

标签: css twitter-bootstrap


【解决方案1】:

正如我已故的伟大计算机科学教授过去常说的那样,解决方案很重要。 Slick Carousel(Bootstrap Carousel 的衍生物)使用 body 标签上的 class="sld-transition-2"(三个可用类之一)来设置轮播的转换。这与我试图设置的渐变过渡相冲突。所以它被删除了。

@transportedman 从 Stackoverflow answer 提供的 CSS3 解决方案是关键。我根据我们的要求对其进行了一些修改,并将其放在要为网站加载的最后一个 CSS 文件中(以覆盖之前的所有内容):

/*
inspired from http://codepen.io/Rowno/pen/Afykb 
https://stackoverflow.com/questions/26770055/bootstrap-carousel-fade-no-longer-working-with-maxcdn-3-3-bootstrap-min-css
*/
.carousel-fade .carousel-inner .item {
  opacity: 0;
  transition-property: opacity;
  transition-duration: 4s;
  transition-timing-function:linear;
}

.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."
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,
    .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);
    }
}

最后但同样重要的是,修改轮播 DIV 标记以具有data-interval 属性,该属性大于上述 CSS3 中设置的transition-duration

<div class="carousel slide carousel-fade" id="slideshow-carousel-1" data-ride="carousel" data-interval="7000">
.....
</div>

希望这可以帮助遇到类似问题的其他人。

【讨论】:

    【解决方案2】:

    由于@Turbojohan 提供的链接不再起作用。以下代码来自已弃用的链接。只需将幻灯片类属性与淡入淡出即可。

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

    【讨论】:

      【解决方案3】:

      在第一行删除 slide 类:

      &lt;div class="carousel" id="slideshow-carousel-1" data-ride="carousel"&gt;

      在css中添加:

      .carousel .slide-image.active {
        opacity: 1;
        transition: opacity 1s ease-in;
      }
      
      .carousel .slide-image {
        opacity: 0;
        display: block;
        left: 0;
        transition: opacity 1s ease-out;
      }
      

      【讨论】:

        【解决方案4】:

        添加这个

        transition: opacity ease-out .7s;
        

        在你的课堂上

        .carousel.fade .item 
        

        看起来像

        .carousel.fade .item {
          transition: opacity ease-out .7s;
        }
        

        您可以增加时间以使其更慢

        【讨论】:

          猜你喜欢
          • 2017-12-11
          • 1970-01-01
          • 1970-01-01
          • 2012-03-20
          • 2023-03-25
          • 1970-01-01
          • 2014-03-07
          • 2022-11-20
          • 2010-11-24
          相关资源
          最近更新 更多