Bootstrap 4:轮播淡入淡出过渡不起作用
Posted
技术标签:
【中文标题】Bootstrap 4:轮播淡入淡出过渡不起作用【英文标题】:Bootstrap 4: Carousel Fade Transition Not Working 【发布时间】:2018-05-27 13:43:48 【问题描述】:下面的代码在我使用 Bootstrap 版本 3 时工作得非常好。但是,自从升级到 Bootstrap 4 Beta2 后,淡入淡出过渡不起作用。它只是跳转到下一个图像而不是平滑过渡:
<div id="carousel1" class="carousel fade" data-ride="carousel">
<ol class="carousel-indicators">
<li data-target="#carousel1" data-slide-to="0" class="active"></li>
<li data-target="#carousel1" data-slide-to="1"></li>
<li data-target="#carousel1" data-slide-to="2"></li>
</ol>
<div class="carousel-inner" role="listbox">
<div class="item active"><img src="images/a.jpg" class="center-block">
<div class="carousel-caption">
<h3>First slide Heading</h3>
<p>First slide Caption</p>
</div>
</div>
<div class="item"><img src="images/b.jpg" class="center-block">
<div class="carousel-caption">
<h3>Second slide Heading</h3>
<p>Second slide Caption</p>
</div>
</div>
<div class="item"><img src="images/c.jpg" class="center-block">
<div class="carousel-caption">
<h3>Third slide Heading</h3>
<p>Third slide Caption</p>
</div>
</div>
</div>
<a class="left carousel-control" href="#carousel1" role="button" data-slide="prev">
<span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span>
<span class="sr-only">Previous</span>
</a>
<a class="right carousel-control" href="#carousel1" role="button" data-slide="next">
<span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>
<span class="sr-only">Next</span>
</a>
</div>
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;
JS
$(function()
$('.carousel').carousel(
interval: 6000
);
);
环顾四周,似乎最近的引导升级存在一些问题,我们将不胜感激。
【问题讨论】:
【参考方案1】:正如您已经注意到的那样,Bootstrap 4 中发生了很多变化。让我带您了解一下我在下面的解决方案中采用的方法。
.fade
已重命名为 .carousel-fade
以不干扰默认 Bootstrap .fade
类。
.item
已重命名为 .carousel-item
,因为这是 Bootsrap 4 中轮播项目的名称。
由于渐变效果,现在幻灯片的定位是绝对的,我将.embed-responsive embed-responsive-16by9
类添加到.carousel-inner
以及.embed-responsive-item
到.carousel-item
以保持幻灯片容器的高度并注意幻灯片项目的定位。 (如果您想使用具有其他纵横比的图像,您应该更改.embed-responsive-16by9
类。默认值列在here。)
所以这就是我的方法:
.carousel.carousel-fade .carousel-item
display: block;
opacity: 0;
transition: opacity ease-out .7s;
.carousel.carousel-fade .carousel-item.active
opacity: 1 !important;
<div id="carousel-fade" class="carousel carousel-fade" data-ride="carousel" data-interval="2000">
<ol class="carousel-indicators">
<li data-target="#carousel-fade" data-slide-to="0" class="active"></li>
<li data-target="#carousel-fade" data-slide-to="1"></li>
<li data-target="#carousel-fade" data-slide-to="2"></li>
</ol>
<div class="carousel-inner embed-responsive embed-responsive-16by9" role="listbox">
<div class="carousel-item embed-responsive-item active">
<img src="http://via.placeholder.com/1600x900/483D8B/ffffff?text=Slide%201" class="img-fluid">
<div class="carousel-caption">
<h3>First slide Heading</h3>
<p>First slide Caption</p>
</div>
</div>
<div class="carousel-item embed-responsive-item">
<img src="http://via.placeholder.com/1600x900/9400D3/ffffff?text=Slide%202" class="img-fluid">
<div class="carousel-caption">
<h3>Second slide Heading</h3>
<p>Second slide Caption</p>
</div>
</div>
<div class="carousel-item embed-responsive-item">
<img src="http://via.placeholder.com/1600x900/FF1493/ffffff?text=Slide%203" class="img-fluid">
<div class="carousel-caption">
<h3>Third slide Heading</h3>
<p>Third slide Caption</p>
</div>
</div>
</div>
<a class="carousel-control-prev" href="#carousel-fade" role="button" data-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="sr-only">Previous</span>
</a>
<a class="carousel-control-next" href="#carousel-fade" role="button" data-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="sr-only">Next</span>
</a>
</div>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/js/bootstrap.min.js"></script>
还有两个注意事项:
您还可以通过.carousel
的data-interval
属性设置更改间隔。
Bootstrap 4 中轮播控件的标记也已更改。
【讨论】:
哇,非常感谢,这很奏效。老实说,我对引导程序比较陌生,所以这是我见过的第一次升级。我很震惊他们的升级可以破坏简单的功能,但我可以看到他们为什么要实施。再次感谢。 不客气!仅供参考:主要版本的更改往往会破坏事物,但这就是工具的发展方式。 我认为“嵌入响应”类使轮播具有固定高度,并且不像我的图像那样响应。轮播标题和指示器的位置是固定的,但我的图像是响应式的。.embed-responsive-16by9
正在修复.carousel-inner
的纵横比,而不仅仅是高度本身。 (其他默认 aspect ratio classes 也可用。)由于过渡效果,.carousel-item
s 必须绝对定位,因此包装器 (.carousel-inner
) 必须具有设定的高度。但是这个高度是通过填充百分比来设置的,而不是通过 height 属性设置的,因此它是响应式的。
美丽。谢谢。以上是关于Bootstrap 4:轮播淡入淡出过渡不起作用的主要内容,如果未能解决你的问题,请参考以下文章