轮播(Carousel)
幻灯片组件,用于循环显示元素(图像或文本幻灯片),例如轮播。
怎样工作
该轮播是一个幻灯片,用于循环显示一系列内容,这些内容使用CSS 3D转换和一些JavaScript构建。它适用于一系列图像,文本或自定义标记。它还包括对上一个/下一个控件和指示器的支持。
在支持页面可见性API 的浏览器中,当用户看不到网页时(例如浏览器选项卡处于非活动状态、浏览器窗口最小化等),轮播将避免滑动。
prefers-reduced-motion
查询。请参阅我们的可访问性文档的简化运动部分。
请注意,不支持嵌套轮播,轮播通常不符合可访问性标准。
示例
轮播不会自动规范化幻灯片尺寸。因此,您可能需要使用其他实用程序或自定义样式来适当调整内容的大小。虽然轮播支持上一个/下一个控件和指示器,但它们并不是明确需要的。添加和定制您认为合适的。
.active
类需要添加到其中一张幻灯片中,否则轮播将不可见。 还要确保为可选控件在 .carousel
上设置唯一的id,特别是在单个页面上使用多个carousel时。控件和指示符元素必须具有与.carousel
元素的id匹配的 data-bs-target
属性(或链接的 href
)。
仅幻灯片
这是一个只有幻灯片的轮播。注意 carousel图像上存在.d-block
和 .w-100
,以防止浏览器默认图像对齐。
<div id="carouselExampleSlidesOnly" class="carousel slide" data-bs-ride="carousel">
<div class="carousel-inner">
<div class="carousel-item active">
<img src="..." class="d-block w-100" alt="...">
</div>
<div class="carousel-item">
<img src="..." class="d-block w-100" alt="...">
</div>
<div class="carousel-item">
<img src="..." class="d-block w-100" alt="...">
</div>
</div>
</div>
带控件
添加上一个和下一个控件:
<div id="carouselExampleControls" class="carousel slide" data-bs-ride="carousel">
<div class="carousel-inner">
<div class="carousel-item active">
<img src="..." class="d-block w-100" alt="...">
</div>
<div class="carousel-item">
<img src="..." class="d-block w-100" alt="...">
</div>
<div class="carousel-item">
<img src="..." class="d-block w-100" alt="...">
</div>
</div>
<a class="carousel-control-prev" href="#carouselExampleControls" role="button" data-bs-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="visually-hidden">Previous</span>
</a>
<a class="carousel-control-next" href="#carouselExampleControls" role="button" data-bs-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="visually-hidden">Next</span>
</a>
</div>
有指标
您还可以将指示器添加到轮播中,同时添加控件。
<div id="carouselExampleIndicators" class="carousel slide" data-bs-ride="carousel">
<ol class="carousel-indicators">
<li data-bs-target="#carouselExampleIndicators" data-bs-slide-to="0" class="active"></li>
<li data-bs-target="#carouselExampleIndicators" data-bs-slide-to="1"></li>
<li data-bs-target="#carouselExampleIndicators" data-bs-slide-to="2"></li>
</ol>
<div class="carousel-inner">
<div class="carousel-item active">
<img src="..." class="d-block w-100" alt="...">
</div>
<div class="carousel-item">
<img src="..." class="d-block w-100" alt="...">
</div>
<div class="carousel-item">
<img src="..." class="d-block w-100" alt="...">
</div>
</div>
<a class="carousel-control-prev" href="#carouselExampleIndicators" role="button" data-bs-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="visually-hidden">Previous</span>
</a>
<a class="carousel-control-next" href="#carouselExampleIndicators" role="button" data-bs-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="visually-hidden">Next</span>
</a>
</div>
带字幕
使用任何.carousel-item
中的.carousel-caption
元素,可以轻松地为幻灯片添加标题。它们可以很容易地隐藏在较小的视口中,如下所示,使用可选的 显示工具。 我们首先用.d-none
隐藏它们,然后用.d-md-block
将它们放回中型设备上。
<div id="carouselExampleCaptions" class="carousel slide" data-bs-ride="carousel">
<ol class="carousel-indicators">
<li data-bs-target="#carouselExampleCaptions" data-bs-slide-to="0" class="active"></li>
<li data-bs-target="#carouselExampleCaptions" data-bs-slide-to="1"></li>
<li data-bs-target="#carouselExampleCaptions" data-bs-slide-to="2"></li>
</ol>
<div class="carousel-inner">
<div class="carousel-item active">
<img src="..." class="d-block w-100" alt="...">
<div class="carousel-caption d-none d-md-block">
<h5>First slide label</h5>
<p>Nulla vitae elit libero, a pharetra augue mollis interdum.</p>
</div>
</div>
<div class="carousel-item">
<img src="..." class="d-block w-100" alt="...">
<div class="carousel-caption d-none d-md-block">
<h5>Second slide label</h5>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
</div>
</div>
<div class="carousel-item">
<img src="..." class="d-block w-100" alt="...">
<div class="carousel-caption d-none d-md-block">
<h5>Third slide label</h5>
<p>Praesent commodo cursus magna, vel scelerisque nisl consectetur.</p>
</div>
</div>
</div>
<a class="carousel-control-prev" href="#carouselExampleCaptions" role="button" data-bs-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="visually-hidden">Previous</span>
</a>
<a class="carousel-control-next" href="#carouselExampleCaptions" role="button" data-bs-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="visually-hidden">Next</span>
</a>
</div>
淡入淡出
将.carousel-fade
添加到您的carousel以使用淡入淡出过渡,而不是幻灯片设置幻灯片动画。
<div id="carouselExampleFade" class="carousel slide carousel-fade" data-bs-ride="carousel">
<div class="carousel-inner">
<div class="carousel-item active">
<img src="..." class="d-block w-100" alt="...">
</div>
<div class="carousel-item">
<img src="..." class="d-block w-100" alt="...">
</div>
<div class="carousel-item">
<img src="..." class="d-block w-100" alt="...">
</div>
</div>
<a class="carousel-control-prev" href="#carouselExampleFade" role="button" data-bs-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="visually-hidden">Previous</span>
</a>
<a class="carousel-control-next" href="#carouselExampleFade" role="button" data-bs-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="visually-hidden">Next</span>
</a>
</div>
单个 .carousel-item
间隔
将data-bs-interval=""
添加到.carousel-item
,以更改自动循环到下一个项目之间的延迟时间。
<div id="carouselExampleInterval" class="carousel slide" data-bs-ride="carousel">
<div class="carousel-inner">
<div class="carousel-item active" data-bs-interval="10000">
<img src="..." class="d-block w-100" alt="...">
</div>
<div class="carousel-item" data-bs-interval="2000">
<img src="..." class="d-block w-100" alt="...">
</div>
<div class="carousel-item">
<img src="..." class="d-block w-100" alt="...">
</div>
</div>
<a class="carousel-control-prev" href="#carouselExampleInterval" role="button" data-bs-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="visually-hidden">Previous</span>
</a>
<a class="carousel-control-next" href="#carouselExampleInterval" role="button" data-bs-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="visually-hidden">Next</span>
</a>
</div>
阴影变体
将.carousel-dark
添加到.carousel
以获得较深色的控件、指示器和标题。控件已使用 filter
CSS属性从其默认白色填充反转。字幕和控件有额外的Sass变量,可以自定义color
和 background-color
。
<div id="carouselExampleDark" class="carousel carousel-dark slide" data-bs-ride="carousel">
<ol class="carousel-indicators">
<li data-bs-target="#carouselExampleDark" data-bs-slide-to="0" class="active"></li>
<li data-bs-target="#carouselExampleDark" data-bs-slide-to="1"></li>
<li data-bs-target="#carouselExampleDark" data-bs-slide-to="2"></li>
</ol>
<div class="carousel-inner">
<div class="carousel-item active" data-bs-interval="10000">
<img src="..." class="d-block w-100" alt="...">
<div class="carousel-caption d-none d-md-block">
<h5>First slide label</h5>
<p>Nulla vitae elit libero, a pharetra augue mollis interdum.</p>
</div>
</div>
<div class="carousel-item" data-bs-interval="2000">
<img src="..." class="d-block w-100" alt="...">
<div class="carousel-caption d-none d-md-block">
<h5>Second slide label</h5>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
</div>
</div>
<div class="carousel-item">
<img src="..." class="d-block w-100" alt="...">
<div class="carousel-caption d-none d-md-block">
<h5>Third slide label</h5>
<p>Praesent commodo cursus magna, vel scelerisque nisl consectetur.</p>
</div>
</div>
</div>
<a class="carousel-control-prev" href="#carouselExampleDark" role="button" data-bs-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="visually-hidden">Previous</span>
</a>
<a class="carousel-control-next" href="#carouselExampleDark" role="button" data-bs-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="visually-hidden">Next</span>
</a>
</div>
用法
通过数据属性
使用数据属性可以轻松控制轮播的位置。 data-bs-slide
接受关键字prev
或 next
,这会改变相对于当前位置的幻灯片位置。或者,使用data-bs-slide-to
将原始幻灯片索引传递给carousel data-bs-slide-to="2"
,从而将幻灯片位置移动到从0
开始的特定索引。
data-bs-ride="carousel"
属性用于将carousel标记为从页面加载开始设置动画。如果您不使用data-bs-ride="carousel"
初始化您的轮播,您必须自己初始化它。它不能与同一个carousel的显式JavaScript初始化(冗余和不必要的)结合使用。
通过JavaScript
手动调用轮播:
var myCarousel = document.querySelector('#myCarousel')
var carousel = new bootstrap.Carousel(myCarousel)
选项
选项可以通过数据属性或JavaScript传递。对于数据属性,将选项名称附加到data-bs-
,如 data-bs-interval=""
中所示。
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
interval |
number | 5000 |
自动循环项目之间的延迟时间。如果为false,carousel将不会自动循环。 |
keyboard |
boolean | true |
轮播是否应对键盘事件作出反应。 |
pause |
string | boolean | "hover" |
如果设置为 在支持触摸的设备上,当设置为 |
slide |
string | boolean | false |
用户手动循环第一个项目后自动播放轮播。如果是 "carousel",则在加载时自动放置carousel。 |
wrap |
boolean | true |
轮播应连续循环还是硬停止。 |
touch |
boolean | true |
轮播是否应支持触摸屏设备上的左/右滑动交互。 |
方法
例如,您可以使用carousel构造函数创建carousel实例,以使用其他选项进行初始化并开始在项目之间循环:
var myCarousel = document.querySelector('#myCarousel')
var carousel = new bootstrap.Carousel(myCarousel, {
interval: 2000,
wrap: false
})
方法 | 描述 |
---|---|
cycle |
从左到右循环轮播项。 |
pause |
阻止轮播在各项之间循环。 |
prev |
循环到上一项。 在显示上一项之前(例如,在slid.bs.carousel 事件发生之前)返回到调用者。 |
next |
循环到下一项。在显示下一项之前 (例如,在 slid.bs.carousel 事件发生之前)返回到调用者。 |
nextWhenVisible |
当页面不可见或轮播或其父级不可见时,不要将轮播循环到下一个。 在显示目标项之前返回给调用者。 |
to |
将轮播循环到特定帧(从0开始,类似于数组)。在显示目标项目之前(例如,在slid.bs.carousel 事件发生之前)返回到调用者。 |
dispose |
销毁元素的轮播。(删除DOM元素上存储的数据) |
getInstance |
静态方法,它允许您获取与DOM元素关联的carousel实例。 |
事件
Bootstrap的carousel类公开了两个事件,用于连接到carousel功能。两个事件都具有以下附加属性:
direction
: 轮播滑动的方向("left"
或"right"
)。relatedTarget
: 作为活动项滑入到位的DOM元素。from
: 当前项目的索引to
: 下一项的索引
所有carousel事件都在carousel本身触发(即在<div class="carousel">
)。
事件类型 | 描述 |
---|---|
slide.bs.carousel |
调用slide 实例方法时立即触发。 |
slid.bs.carousel |
当轮播完成其幻灯片转换时触发。 |
var myCarousel = document.getElementById('myCarousel')
myCarousel.addEventListener('slide.bs.carousel', function () {
// do something...
})
变更过渡时间
.carousel-item
的转换持续时间可以在编译前使用$carousel-transition
Sass变量更改,如果使用已编译的CSS,则可以使用自定义样式更改。如果应用了多个变换,请确保首先定义变换变换(例如,transition: transform 2s ease, opacity .5s ease-out
)。