一个幻灯片组件,用于循环浏览元素(图像或文本幻灯片),就像轮播一样。

工作原理

轮播是一个幻灯片,用于循环播放一系列内容,它使用 CSS 3D 变换和一些 JavaScript 构建。它适用于一系列图像、文本或自定义标记。它还包括对上一个/下一个控件和指示器的支持。

在支持 页面可见性 API 的浏览器中,当用户不可见网页时(例如,当浏览器选项卡处于非活动状态、浏览器窗口最小化等),轮播将避免滑动。

此组件的动画效果取决于 prefers-reduced-motion 媒体查询。请参阅 无障碍文档的减少动作部分

请注意,不支持嵌套轮播,并且轮播通常不符合无障碍标准。

最后,如果您要从源代码构建我们的 JavaScript,它需要 util.js

示例

轮播不会自动规范幻灯片尺寸。因此,您可能需要使用其他实用程序或自定义样式来适当调整内容大小。虽然轮播支持上一个/下一个控件和指示器,但它们并不是明确必需的。根据需要添加和自定义。

需要将 .active 类添加到其中一个幻灯片,否则轮播将不可见。另外,请务必为 .carousel 设置一个唯一的 id 以用于可选控件,特别是如果您在单个页面上使用多个轮播时。控件和指示器元素必须具有 data-target 属性(或链接的 href),该属性与 .carousel 元素的 id 相匹配。

仅幻灯片

这是一个仅包含幻灯片的轮播。请注意轮播图像上存在 .d-block.w-100,以防止浏览器默认图像对齐。

<div id="carouselExampleSlidesOnly" class="carousel slide" data-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>

带控件

添加上一个和下一个控件。我们建议使用 <button> 元素,但您也可以使用 <a> 元素和 role="button"

<div id="carouselExampleControls" class="carousel slide" data-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>
 <button class="carousel-control-prev" type="button" data-target="#carouselExampleControls" data-slide="prev">
    <span class="carousel-control-prev-icon" aria-hidden="true"></span>
    <span class="sr-only">Previous</span>
  </button>
  <button class="carousel-control-next" type="button" data-target="#carouselExampleControls" data-slide="next">
    <span class="carousel-control-next-icon" aria-hidden="true"></span>
    <span class="sr-only">Next</span>
  </button>
</div>

带指示器

您还可以将指示器添加到轮播中,以及控件。

<div id="carouselExampleIndicators" class="carousel slide" data-ride="carousel">
  <ol class="carousel-indicators">
    <li data-target="#carouselExampleIndicators" data-slide-to="0" class="active"></li>
    <li data-target="#carouselExampleIndicators" data-slide-to="1"></li>
    <li data-target="#carouselExampleIndicators" data-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>
  <button class="carousel-control-prev" type="button" data-target="#carouselExampleIndicators" data-slide="prev">
    <span class="carousel-control-prev-icon" aria-hidden="true"></span>
    <span class="sr-only">Previous</span>
  </button>
  <button class="carousel-control-next" type="button" data-target="#carouselExampleIndicators" data-slide="next">
    <span class="carousel-control-next-icon" aria-hidden="true"></span>
    <span class="sr-only">Next</span>
  </button>
</div>

带标题

使用任何 .carousel-item 中的 .carousel-caption 元素轻松为幻灯片添加标题。它们可以轻松隐藏在较小的视口中,如下所示,并带有可选的 显示实用程序。我们最初使用 .d-none 隐藏它们,并使用 .d-md-block 在中型设备上重新显示它们。

<div id="carouselExampleCaptions" class="carousel slide" data-ride="carousel">
  <ol class="carousel-indicators">
    <li data-target="#carouselExampleCaptions" data-slide-to="0" class="active"></li>
    <li data-target="#carouselExampleCaptions" data-slide-to="1"></li>
    <li data-target="#carouselExampleCaptions" data-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>Some representative placeholder content for the first slide.</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>Some representative placeholder content for the second slide.</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>Some representative placeholder content for the third slide.</p>
      </div>
    </div>
  </div>
  <button class="carousel-control-prev" type="button" data-target="#carouselExampleCaptions" data-slide="prev">
    <span class="carousel-control-prev-icon" aria-hidden="true"></span>
    <span class="sr-only">Previous</span>
  </button>
  <button class="carousel-control-next" type="button" data-target="#carouselExampleCaptions" data-slide="next">
    <span class="carousel-control-next-icon" aria-hidden="true"></span>
    <span class="sr-only">Next</span>
  </button>
</div>

交叉淡化

.carousel-fade 添加到旋转木马中,以使用淡入淡出过渡而不是滑动来为幻灯片添加动画效果。根据旋转木马的内容(例如,仅文本幻灯片),你可能需要将 .bg-body 或一些自定义 CSS 添加到 .carousel-item 中,以便正确地交叉淡化。

<div id="carouselExampleFade" class="carousel slide carousel-fade" data-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>
  <button class="carousel-control-prev" type="button" data-target="#carouselExampleFade" data-slide="prev">
    <span class="carousel-control-prev-icon" aria-hidden="true"></span>
    <span class="sr-only">Previous</span>
  </button>
  <button class="carousel-control-next" type="button" data-target="#carouselExampleFade" data-slide="next">
    <span class="carousel-control-next-icon" aria-hidden="true"></span>
    <span class="sr-only">Next</span>
  </button>
</div>

data-interval="" 添加到 .carousel-item 中,以更改在自动循环到下一项之前延迟的时间量。

<div id="carouselExampleInterval" class="carousel slide" data-ride="carousel">
  <div class="carousel-inner">
    <div class="carousel-item active" data-interval="10000">
      <img src="..." class="d-block w-100" alt="...">
    </div>
    <div class="carousel-item" data-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>
  <button class="carousel-control-prev" type="button" data-target="#carouselExampleInterval" data-slide="prev">
    <span class="carousel-control-prev-icon" aria-hidden="true"></span>
    <span class="sr-only">Previous</span>
  </button>
  <button class="carousel-control-next" type="button" data-target="#carouselExampleInterval" data-slide="next">
    <span class="carousel-control-next-icon" aria-hidden="true"></span>
    <span class="sr-only">Next</span>
  </button>
</div>

禁用触控滑动

旋转木马支持在触摸屏设备上向左/向右滑动以在幻灯片之间移动。可以使用 data-touch 属性禁用此功能。下面的示例也不包含 data-ride 属性,并且具有 data-interval="false",因此它不会自动播放。

<div id="carouselExampleControlsNoTouching" class="carousel slide" data-touch="false" data-interval="false">
  <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>
  <button class="carousel-control-prev" type="button" data-target="#carouselExampleControlsNoTouching" data-slide="prev">
    <span class="carousel-control-prev-icon" aria-hidden="true"></span>
    <span class="sr-only">Previous</span>
  </button>
  <button class="carousel-control-next" type="button" data-target="#carouselExampleControlsNoTouching" data-slide="next">
    <span class="carousel-control-next-icon" aria-hidden="true"></span>
    <span class="sr-only">Next</span>
  </button>
</div>

用法

通过数据属性

使用数据属性轻松控制旋转木马的位置。data-slide 接受关键字 prevnext,它们会相对于当前位置改变幻灯片的位置。或者,使用 data-slide-to 将原始幻灯片索引传递给旋转木马 data-slide-to="2",它会将幻灯片位置移动到从 0 开始的特定索引。

data-ride="carousel" 属性用于标记旋转木马,使其在页面加载时开始播放动画。如果你不使用 data-ride="carousel" 来初始化旋转木马,则必须自己初始化它。它不能与相同旋转木马的(冗余且不必要的)显式 JavaScript 初始化结合使用。

通过 JavaScript

使用手动调用旋转木马

$('.carousel').carousel()

选项

可以通过数据属性或 JavaScript 传递选项。对于数据属性,将选项名称附加到 data-,如 data-interval=""

名称 类型 默认值 描述
interval 数字 5000 在自动循环一项之前延迟的时间量。如果为 false,旋转木马将不会自动循环。
keyboard 布尔值 true 旋转木马是否应该对键盘事件做出反应。
pause 字符串 | 布尔值 'hover'

如果设置为 'hover',则在 mouseenter 时暂停旋转木马的循环,并在 mouseleave 时恢复旋转木马的循环。如果设置为 false,则将鼠标悬停在旋转木马上方不会暂停它。

在启用触摸的设备上,当设置为 'hover' 时,循环将在 touchend(用户完成与旋转木马的交互后)暂停两个间隔,然后再自动恢复。请注意,这除了上述鼠标行为之外。

ride 字符串 false 在用户手动循环第一项后自动播放旋转木马。如果设置为 'carousel',则在加载时自动播放旋转木马。
wrap 布尔值 true 旋转木马是否应该连续循环或硬停止。
touch 布尔值 true 旋转木马是否应该支持触摸屏设备上的向左/向右滑动交互。

方法

异步方法和转换

所有 API 方法都是异步的,并启动一个转换。它们在转换启动后立即返回给调用者,但在转换结束之前。此外,将忽略转换组件的方法调用。

有关更多信息,请参阅我们的 JavaScript 文档.

.carousel(options)

使用可选选项 object 初始化旋转木马,并开始循环浏览项目。

$('.carousel').carousel({
  interval: 2000
})

.carousel('cycle')

从左向右循环播放轮播项目。

.carousel('pause')

停止轮播循环播放项目。

.carousel(number)

将轮播循环到特定帧(从 0 开始,类似于数组)。在显示目标项目之前返回给调用者(即在 slid.bs.carousel 事件发生之前)。

.carousel('prev')

循环到前一个项目。在前一个项目显示之前返回给调用者(即在 slid.bs.carousel 事件发生之前)。

.carousel('next')

循环到下一个项目。在下一个项目显示之前返回给调用者(即在 slid.bs.carousel 事件发生之前)。

.carousel('dispose')

销毁元素的轮播。

.carousel('nextWhenVisible')

当页面不可见或轮播或其父元素不可见时,不要将轮播循环到下一个项目。在下一个项目显示之前返回给调用者(即在 slid.bs.carousel 事件发生之前)。

.carousel('to')

将轮播循环到特定帧(从 0 开始,类似于数组)。在下一个项目显示之前返回给调用者(即在 slid.bs.carousel 事件发生之前)。

事件

Bootstrap 的轮播类公开了两个事件,用于连接到轮播功能。两个事件都具有以下附加属性

  • direction:轮播滑动方向("left""right")。
  • relatedTarget:作为活动项目滑入的 DOM 元素。
  • from:当前项目的索引
  • to:下一个项目的索引

所有轮播事件都在轮播本身触发(即在 <div class="carousel"> 中)。

事件类型 描述
slide.bs.carousel 当调用 slide 实例方法时,此事件会立即触发。
slid.bs.carousel 当轮播完成其滑动过渡时,触发此事件。
$('#myCarousel').on('slide.bs.carousel', function () {
  // do something...
})

更改过渡持续时间

如果使用已编译的 CSS,则可以在编译之前使用 $carousel-transition Sass 变量或自定义样式来更改 .carousel-item 的过渡持续时间。如果应用了多个过渡,请确保首先定义转换过渡(例如 transition: transform 2s ease, opacity .5s ease-out)。