添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
豁达的跑步鞋  ·  Trying to implement ...·  6 月前    · 
不羁的课本  ·  Fix List for DB2 ...·  7 月前    · 
打篮球的作业本  ·  中国·深圳政府采购·  8 月前    · 

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

出于性能原因,必须使用 轮播构造函数方法 手动初始化轮播 。如果不进行初始化,则在用户显式激活控件或指示器之前,不会注册某些事件侦听器(特别是需要触摸/轻扫支持的事件)。

唯一的例外是具有 data-bs-ride="carousel" 属性的 自动播放轮播 ,因为这些是在页面加载时自动初始化的。如果您使用带有 data 属性的自动播放轮播, 请不要使用构造函数方法显式初始化相同的轮播

不支持嵌套轮播。您还应该知道,轮播通常会导致可用性和辅助功能方面的挑战。

此组件的动画效果取决于 prefers-reduced-motion 媒体查询。请参阅我们的辅助功能文档的 减少运动部分

下面是包含三张幻灯片的轮播的基本示例。请注意上一个/下一个控件。我们建议使用 <button> 元素,但您也可以将 <a> 元素与 role="button" 一起使用。

<div id="carouselExample" class="carousel slide">
  <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="#carouselExample" 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="#carouselExample" data-bs-slide="next">
    <span class="carousel-control-next-icon" aria-hidden="true"></span>
    <span class="visually-hidden">Next</span>
  </button>
</div>

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

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

您可以将指示器添加到轮播以及上一个/下一个控件。指示器允许用户直接跳转到特定幻灯片。

<div id="carouselExampleIndicators" class="carousel slide">
  <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-item 中的 .carousel-caption 元素为幻灯片添加字幕。它们可以很容易地隐藏在较小的视口上,如下所示,使用可选的 显示实用程序 。我们最初用 .d-none 隐藏它们,然后用 .d-md-block 将它们带回中型设备上。

<div id="carouselExampleCaptions" class="carousel slide">
  <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 添加到轮播界面,即可为使用淡入淡出过渡而不是幻灯片的幻灯片制作动画。根据您的轮播内容(例如,纯文本幻灯片),您可能需要在 .carousel-item 中添加 .bg-body 或一些自定义 CSS,以便进行适当的交叉淡入淡出。

<div id="carouselExampleFade" class="carousel slide carousel-fade">
  <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>

自动播放轮播

您可以通过将 ride 选项设置为 carousel 来使轮播在页面加载时自动播放。自动播放轮播会在鼠标悬停时自动暂停。可以使用 pause 选项控制此行为。在支持 页面可见性 API 的浏览器中,当用户看不到网页时(例如,当浏览器选项卡处于非活动状态或浏览器窗口最小化时),轮播将停止循环。

出于无障碍原因,我们建议避免使用自动播放轮播。如果您的网页包含自动播放轮播,我们建议您提供额外的按钮或控件来显式暂停/停止轮播。

请参阅 WCAG 2.1 标准 2.2.2 暂停、停止、隐藏 .

<div id="carouselExampleAutoplaying" 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="#carouselExampleAutoplaying" 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="#carouselExampleAutoplaying" data-bs-slide="next">
    <span class="carousel-control-next-icon" aria-hidden="true"></span>
    <span class="visually-hidden">Next</span>
  </button>
</div>

ride 选项设置为 true ”而不是 carousel 时,轮播不会在网页加载时自动开始循环。相反,它只会在第一次用户交互后启动。

<div id="carouselExampleRide" class="carousel slide" data-bs-ride="true">
  <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="#carouselExampleRide" 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="#carouselExampleRide" 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="" 添加到 .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>
  <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>

在没有控件的情况下自动播放轮播

这是一个仅包含幻灯片的轮播。请注意轮播图片上存在 .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>

禁用触摸滑动

轮播支持在触摸屏设备上向左/向右滑动以在幻灯片之间移动。这可以通过将 touch 选项设置为 false 来禁用。

<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>
在 v5.3.0 版本中弃用

.carousel-dark 添加到 .carousel 中,以获取较暗的控件、指示器和标题。与带有 filter CSS 属性的默认白色填充相比,控件是反转的。字幕和控件具有额外的 Sass 变量,用于自定义 color background-color

注意! 组件的深色变体在 v5.3.0 中已弃用,引入了颜色模式。而不是添加 .carousel-dark ,在根元素、父包装器或组件本身上设置 data-bs-theme="dark"
<div id="carouselExampleDark" class="carousel carousel-dark slide">
  <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>

自定义过渡

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

Sass 变量

所有轮播的变量:

scss/_variables.scss
$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`)

深色轮播的变量:

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

通过数据属性

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

通过 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,单独的数据属性将覆盖 data-bs-config 上给出的值。此外,现有的数据属性能够容纳JSON值,如data-bs-delay='{"show":0,"hide":150}'

string, boolean "hover" 如果设置为"hover",则会在 mouseenter上暂停轮播的循环,并在mouseleave上恢复轮播的循环。如果设置为false,将鼠标悬停在轮播上不会暂停轮播。在支持触摸的设备上,当设置为"hover"时,循环将在touchend(用户完成与轮播的互动后)暂停两个间隔,然后自动恢复。这是对鼠标行为的补充。 string, boolean false 如果设置为true,则在用户手动循环第一项后自动播放轮播。如果设置为"carousel",则会在加载时自动播放轮播。 touch boolean 轮播是否应支持在触摸屏设备上进行左/右滑动交互。 boolean 轮播是应连续循环还是硬停止。 所有 API 方法都是异步的,并且会启动转换。 它们在转换开始后但在转换结束之前立即返回给调用方。此外,对转换组件的方法调用将被忽略。
在我们的 JavaScript 文档中了解更多信息

您可以使用轮播构造函数创建轮播实例,并传递任何其他选项。例如,要在停用触摸支持的情况下,以特定间隔手动初始化自动播放轮播(假设您未在标记本身中使用data-bs-ride="carousel"属性),您可以使用:

const myCarouselElement = document.querySelector('#myCarousel')
const carousel = new bootstrap.Carousel(myCarouselElement, {
  interval: 2000,
  touch: false
getInstance
静态方法,允许您获取与 DOM 元素关联的轮播实例。你可以像这样使用它:bootstrap.Carousel.getInstance(element).
getOrCreateInstance
静态方法,返回与 DOM 元素关联的轮播实例,或在未初始化的情况下创建一个新实例。你可以像这样使用它: bootstrap.Carousel.getOrCreateInstance(element).
循环到下一项。在显示下一个项目之前返回给调用方(例如,在slid.bs.carousel 事件发生之前)。
nextWhenVisible
当页面、轮播界面或轮播的父级不可见时,请勿将轮播循环到下一页。在显示目标项之前返回给调用方pause
阻止轮播循环浏览项目。
循环到上一项。在显示上一项之前返回给调用方(例如,在 slid.bs.carousel 事件发生之前)。
将轮播循环到特定帧(从 0 开始,类似于数组)。在显示目标项之前(例如,在slid.bs.carousel事件发生之前)返回给调用方
const myCarousel = document.getElementById('myCarousel')
myCarousel.addEventListener('slide.bs.carousel', event => {
  // do something...