跳到主要内容 跳到文档导航
Check
in English

旋转木马

用于循环播放元素(图像或文本幻灯片)的幻灯片组件,如轮播。

这个怎么运作

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

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

该组件的动画效果依赖于 prefers-reduced-motion媒体查询。请参阅 我们可访问性文档的减少运动部分

请注意,不支持嵌套轮播,并且轮播通常不符合可访问性标准。

例子

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

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

仅幻灯片

这是一个只有幻灯片的旋转木马。请注意轮播图像上的.d-block.w-100以防止浏览器默认图像对齐。

html
<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>

带控件

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

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

有指标

您还可以将指示器与控件一起添加到轮播中。

html
<div id="carouselExampleIndicators" class="carousel slide" data-bs-ride="true">
  <div class="carousel-indicators">
    <button type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide-to="0" class="active" aria-current="true" aria-label="Slide 1"></button>
    <button type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide-to="1" aria-label="Slide 2"></button>
    <button type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide-to="2" aria-label="Slide 3"></button>
  </div>
  <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-bs-target="#carouselExampleIndicators" data-bs-slide="prev">
    <span class="carousel-control-prev-icon" aria-hidden="true"></span>
    <span class="visually-hidden">Previous</span>
  </button>
  <button class="carousel-control-next" type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide="next">
    <span class="carousel-control-next-icon" aria-hidden="true"></span>
    <span class="visually-hidden">Next</span>
  </button>
</div>

带字幕

使用.carousel-caption任何.carousel-item. 它们可以很容易地隐藏在较小的视口中,如下所示,使用可选的显示实用程序。我们最初使用隐藏它们,.d-none然后使用.d-md-block.

html
<div id="carouselExampleCaptions" class="carousel slide" data-bs-ride="false">
  <div class="carousel-indicators">
    <button type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide-to="0" class="active" aria-current="true" aria-label="Slide 1"></button>
    <button type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide-to="1" aria-label="Slide 2"></button>
    <button type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide-to="2" aria-label="Slide 3"></button>
  </div>
  <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-bs-target="#carouselExampleCaptions" data-bs-slide="prev">
    <span class="carousel-control-prev-icon" aria-hidden="true"></span>
    <span class="visually-hidden">Previous</span>
  </button>
  <button class="carousel-control-next" type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide="next">
    <span class="carousel-control-next-icon" aria-hidden="true"></span>
    <span class="visually-hidden">Next</span>
  </button>
</div>

淡入淡出

添加.carousel-fade到您的轮播以使用淡入淡出过渡而不是幻灯片为幻灯片制作动画。根据您的轮播内容(例如,纯文本幻灯片),您可能希望向 s 添加.bg-body或一些自定义 CSS 以.carousel-item进行正确的交叉淡入淡出。

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

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

html
<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>
  <button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleInterval" data-bs-slide="prev">
    <span class="carousel-control-prev-icon" aria-hidden="true"></span>
    <span class="visually-hidden">Previous</span>
  </button>
  <button class="carousel-control-next" type="button" data-bs-target="#carouselExampleInterval" data-bs-slide="next">
    <span class="carousel-control-next-icon" aria-hidden="true"></span>
    <span class="visually-hidden">Next</span>
  </button>
</div>

禁用触摸滑动

轮播支持在触摸屏设备上向左/向右滑动以在幻灯片之间移动。这可以使用data-bs-touch属性禁用。下面的示例也不包含该data-bs-ride属性,因此它不会自动播放。

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

深色变体

添加.carousel-dark.carousel较暗的控件、指示器和标题。filter控件已使用CSS 属性从其默认的白色填充反转。标题和控件有额外的 Sass 变量来自定义colorbackground-color

html
<div id="carouselExampleDark" class="carousel carousel-dark slide" data-bs-ride="carousel">
  <div class="carousel-indicators">
    <button type="button" data-bs-target="#carouselExampleDark" data-bs-slide-to="0" class="active" aria-current="true" aria-label="Slide 1"></button>
    <button type="button" data-bs-target="#carouselExampleDark" data-bs-slide-to="1" aria-label="Slide 2"></button>
    <button type="button" data-bs-target="#carouselExampleDark" data-bs-slide-to="2" aria-label="Slide 3"></button>
  </div>
  <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>Some representative placeholder content for the first slide.</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>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-bs-target="#carouselExampleDark" data-bs-slide="prev">
    <span class="carousel-control-prev-icon" aria-hidden="true"></span>
    <span class="visually-hidden">Previous</span>
  </button>
  <button class="carousel-control-next" type="button" data-bs-target="#carouselExampleDark" data-bs-slide="next">
    <span class="carousel-control-next-icon" aria-hidden="true"></span>
    <span class="visually-hidden">Next</span>
  </button>
</div>

自定义过渡

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

萨斯

变量

所有轮播的变量:

$carousel-control-color:             $white;
$carousel-control-width:             15%;
$carousel-control-opacity:           .5;
$carousel-control-hover-opacity:     .9;
$carousel-control-transition:        opacity .15s ease;

$carousel-indicator-width:           30px;
$carousel-indicator-height:          3px;
$carousel-indicator-hit-area-height: 10px;
$carousel-indicator-spacer:          3px;
$carousel-indicator-opacity:         .5;
$carousel-indicator-active-bg:       $white;
$carousel-indicator-active-opacity:  1;
$carousel-indicator-transition:      opacity .6s ease;

$carousel-caption-width:             70%;
$carousel-caption-color:             $white;
$carousel-caption-padding-y:         1.25rem;
$carousel-caption-spacer:            1.25rem;

$carousel-control-icon-width:        2rem;

$carousel-control-prev-icon-bg:      url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$carousel-control-color}'><path d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/></svg>");
$carousel-control-next-icon-bg:      url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$carousel-control-color}'><path d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/></svg>");

$carousel-transition-duration:       .6s;
$carousel-transition:                transform $carousel-transition-duration ease-in-out; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)

黑暗轮播的变量:

$carousel-dark-indicator-active-bg:  $black;
$carousel-dark-caption-color:        $black;
$carousel-dark-control-icon-filter:  invert(1) grayscale(100);

用法

通过数据属性

使用数据属性轻松控制轮播的位置。data-bs-slide接受关键字prevor next,它改变相对于当前位置的幻灯片位置。或者,使用data-bs-slide-to将原始幻灯片索引传递给 carousel data-bs-slide-to="2",这会将幻灯片位置移动到以 开头的特定索引0

data-bs-ride="carousel"属性用于将轮播标记为在页面加载时开始动画。如果你不使用data-bs-ride="carousel"初始化你的轮播,你必须自己初始化它。它不能与同一轮播的(冗余和不必要的)显式 JavaScript 初始化结合使用。

通过 JavaScript

手动调用轮播:

const carousel = new bootstrap.Carousel('#myCarousel')

选项

由于选项可以通过数据属性或 JavaScript 传递,因此您可以将选项名称附加到data-bs-,如data-bs-animation="{value}". 通过数据属性传递选项时,请确保将选项名称的大小写类型从“ camelCase ”更改为“ kebab-case ”。例如,使用data-bs-custom-class="beautifier"代替data-bs-customClass="beautifier".

从 Bootstrap 5.2.0 开始,所有组件都支持一个实验性的保留数据属性data-bs-config,该属性可以将简单的组件配置作为 JSON 字符串容纳。当一个元素具有data-bs-config='{"delay":0, "title":123}'data-bs-title="456"属性时,最终title值将是456并且单独的数据属性将覆盖给定的值 on data-bs-config。此外,现有数据属性能够容纳 JSON 值,例如data-bs-delay='{"show":0,"hide":150}'.

姓名 类型 默认 描述
interval 数字 5000 自动循环项目之间的延迟时间。
keyboard 布尔值 true 轮播是否应对键盘事件做出反应。
pause 字符串,布尔值 "hover" 如果设置为"hover",则暂停旋转木马mouseenter的循环并恢复旋转木马的循环mouseleave。如果设置为false,则将鼠标悬停在轮播上不会暂停它。在启用触摸的设备上,当设置为 时"hover",循环将暂停touchend(一旦用户完成与轮播的交互)两个时间间隔,然后自动恢复。这是对鼠标行为的补充。
ride 字符串,布尔值 false 如果设置为true,则在用户手动循环第一个项目后自动播放轮播。如果设置为"carousel",则在加载时自动播放轮播。
touch 布尔值 true 轮播是否应支持触摸屏设备上的左/右滑动交互。
wrap 布尔值 true 转盘是否应连续循环或硬停止。

方法

异步方法和转换

所有 API 方法都是异步的并开始一个转换他们在转换开始但在结束之前立即返回给调用者。此外,过渡组件上的方法调用将被忽略

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

您可以使用 carousel 构造函数创建一个 carousel 实例,例如,使用其他选项进行初始化并开始循环遍历项目:

const myCarouselElement = document.querySelector('#myCarousel')
const carousel = new bootstrap.Carousel(myCarouselElement, {
  interval: 2000,
  wrap: false
})
方法 描述
cycle 从左到右循环浏览轮播项目。
dispose 销毁元素的轮播。(删除 DOM 元素上存储的数据)
getInstance 允许您获取与 DOM 元素关联的轮播实例的静态方法,您可以像这样使用它bootstrap.Carousel.getInstance(element)
getOrCreateInstance 返回与 DOM 元素关联的轮播实例或创建一个新的轮播实例以防它未初始化的静态方法。你可以像这样使用它:bootstrap.Carousel.getOrCreateInstance(element).
next 循环到下一个项目。在显示下一个项目之前(例如,在slid.bs.carousel事件发生之前)返回给调用者。
nextWhenVisible 当页面不可见或轮播或其父级不可见时,请勿将轮播循环到下一个。在显示目标项目之前返回给调用者
pause 停止轮播在项目中循环。
prev 循环到上一个项目。在显示前一个项目之前(例如,在事件发生之前)返回给调用者。slid.bs.carousel
to 将轮播循环到特定帧(基于 0,类似于数组)。在显示目标项目之前(例如,在slid.bs.carousel事件发生之前)返回给调用者。

活动

Bootstrap 的 carousel 类公开了两个用于连接 carousel 功能的事件。这两个事件都具有以下附加属性:

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

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

事件类型 描述
slid.bs.carousel 当轮播完成幻灯片转换时触发。
slide.bs.carousel slide调用实例方法时立即触发。
const myCarousel = document.getElementById('myCarousel')

myCarousel.addEventListener('slide.bs.carousel', event => {
  // do something...
})