轮播
轮播是一个用于循环播放一系列内容的幻灯片,它使用 CSS 3D 变换构建。它适用于一系列图片、文本或自定义标记。它还包括对上一个/下一个控件和指示器的支持。
<template>
<div>
<b-carousel
id="carousel-1"
v-model="slide"
:interval="4000"
controls
indicators
background="#ababab"
img-width="1024"
img-height="480"
style="text-shadow: 1px 1px 2px #333;"
@sliding-start="onSlideStart"
@sliding-end="onSlideEnd"
>
<b-carousel-slide
caption="First slide"
text="Nulla vitae elit libero, a pharetra augue mollis interdum."
img-src="https://picsum.photos/1024/480/?image=52"
></b-carousel-slide>
<b-carousel-slide img-src="https://picsum.photos/1024/480/?image=54">
<h1>Hello world!</h1>
</b-carousel-slide>
<b-carousel-slide img-src="https://picsum.photos/1024/480/?image=58"></b-carousel-slide>
<b-carousel-slide>
<template #img>
<img
class="d-block img-fluid w-100"
width="1024"
height="480"
src="https://picsum.photos/1024/480/?image=55"
alt="image slot"
>
</template>
</b-carousel-slide>
<b-carousel-slide caption="Blank Image" img-blank img-alt="Blank image">
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse eros felis, tincidunt
a tincidunt eget, convallis vel est. Ut pellentesque ut lacus vel interdum.
</p>
</b-carousel-slide>
</b-carousel>
<p class="mt-4">
Slide #: {{ slide }}<br>
Sliding: {{ sliding }}
</p>
</div>
</template>
<script>
export default {
data() {
return {
slide: 0,
sliding: null
}
},
methods: {
onSlideStart(slide) {
this.sliding = true
},
onSlideEnd(slide) {
this.sliding = false
}
}
}
</script>
请注意,不支持嵌套轮播。
尺寸
轮播不会自动标准化幻灯片尺寸。因此,您可能需要使用其他实用程序或自定义样式来适当地调整内容大小。在每个幻灯片中使用图片时,请确保它们都具有相同的尺寸(或宽高比)。
在 <b-carousel-slide>
上使用 img-src
或 img-blank
时,可以通过 <b-carousel>
上的 img-width
和 img-height
属性设置图像宽度和高度,并自动将这些值应用到每个 carousel-slide
图像。
请注意,图像仍将具有响应性,并且会自动增大或缩小以适应其父容器的宽度。
在内部,<b-carousel-slide>
使用 <b-img>
组件来渲染图像。img-*
属性映射到 <b-img>
可用的相应属性。
间隔
Carousel 的默认间隔为 5000
ms(5 秒)。可以通过将 interval
属性设置为所需的毫秒数来更改幻灯片之间的间隔。支持的最小滑动间隔为 1000ms(1 秒)。
在支持 页面可见性 API 的浏览器中,当网页对用户不可见时(例如当浏览器选项卡处于非活动状态、浏览器窗口最小化等),Carousel 将避免滑动。当浏览器选项卡处于活动状态时,滑动将恢复。
暂停 Carousel
若要暂停 Carousel 自动滑动,请将 interval
属性设置为 0
。若要重新启动已暂停的 Carousel,请将 interval
重新设置为所需的毫秒数。
当 Carousel 暂停时,用户仍可以通过控件(如果已启用)或触摸滑动(在启用触摸的设备上,如果未禁用)切换幻灯片。
当用户鼠标悬停在轮播图上时,它将自动暂停,当鼠标离开轮播图时,它将自动重新启动。要禁用此功能,请在 <b-carousel>
上设置 no-hover-pause
prop。
控件和指示器
设置 prop controls
以启用上一个和下一个控件按钮。
设置 prop indicators
以显示幻灯片指示器按钮。
指示器和控件可以同时或独立设置。
轮播幻灯片内容
b-carousel-slide
提供了多个 prop 和插槽,用于在幻灯片中放置内容。
Props
caption
用作幻灯片上主标题的文本(放置在具有类 carousel-caption
的内部元素中) text
置于标题下的文本(放置在具有类 carousel-caption
的内部元素中) img-src
要放置在幻灯片背景中的图像的 URL caption-html
caption
prop 的备用 prop,它支持 HTML 字符串 html
text
prop 的备用 prop,它支持 HTML 字符串
警告:谨慎使用 caption-html
和 html
prop 来显示用户提供的内容,因为它可能会使你的应用程序容易受到 XSS 攻击 的攻击,如果你没有首先 清理 用户提供的内容。
命名插槽
default
内容将放置在内部元素中,该元素具有类 carousel-caption
。出现在 caption
和 text
道具的任何内容之后。 img
内容放置在幻灯片的背景中。尽管插槽的名称如此,但你可以将几乎任何内容放置在此插槽中,而不是使用 default
插槽或 caption
和 text
道具。
Carousel 动画
Carousel 默认使用滑动动画。你可以将幻灯片动画更改为交叉淡入淡出动画,或完全禁用动画。
交叉淡入淡出动画
将 <b-carousel>
fade
道具设置为 true
,以使用淡入淡出过渡来为幻灯片设置动画,而不是默认的幻灯片动画。
<div>
<b-carousel
id="carousel-fade"
style="text-shadow: 0px 0px 2px #000"
fade
indicators
img-width="1024"
img-height="480"
>
<b-carousel-slide
caption="First Slide"
img-src="https://picsum.photos/1024/480/?image=10"
></b-carousel-slide>
<b-carousel-slide
caption="Second Slide"
img-src="https://picsum.photos/1024/480/?image=12"
></b-carousel-slide>
<b-carousel-slide
caption="Third Slide"
img-src="https://picsum.photos/1024/480/?image=22"
></b-carousel-slide>
</b-carousel>
</div>
禁用动画
将 <b-carousel>
no-animation
道具设置为 true
,以禁用幻灯片动画。
<div>
<b-carousel
id="carousel-no-animation"
style="text-shadow: 0px 0px 2px #000"
no-animation
indicators
img-width="1024"
img-height="480"
>
<b-carousel-slide
caption="First Slide"
img-src="https://picsum.photos/1024/480/?image=10"
></b-carousel-slide>
<b-carousel-slide
caption="Second Slide"
img-src="https://picsum.photos/1024/480/?image=12"
></b-carousel-slide>
<b-carousel-slide
caption="Third Slide"
img-src="https://picsum.photos/1024/480/?image=22"
></b-carousel-slide>
<b-carousel-slide
caption="Fourth Slide"
img-src="https://picsum.photos/1024/480/?image=23"
></b-carousel-slide>
</b-carousel>
</div>
幻灯片环绕
通常,当 Carousel 在幻灯片列表中到达一端或另一端时,它将环绕到幻灯片列表的另一端并继续循环。
若要禁用 Carousel 幻灯片环绕,请将 no-wrap
道具设置为 true。
在小屏幕上隐藏幻灯片文本内容
在较小的屏幕上,你可能希望隐藏标题和标题。你可以通过 <b-carousel-slide>
的 content-visible-up
道具来实现。该道具接受一个断点名称(即 sm
、md
、lg
、xl
或自定义断点名称,如果你已定义),并将隐藏比断点更小的屏幕上的标题和标题。
触控滑动支持
在支持触控的设备上,用户可以通过在轮播图上向左或向右滑动来切换幻灯片。要禁用触控控制,请将 no-touch
属性设置为 true
。
v-model
支持
通过 v-model
(绑定到 value
属性)以编程方式控制显示的幻灯片。请注意,幻灯片从 0
开始索引。
以编程方式控制幻灯片
<b-carousel>
实例提供了多种用于控制滑动的公共方法
方法 | 描述 |
setSlide(index) | 转到由 index 指定的幻灯片 |
next() | 转到下一张幻灯片 |
prev() | 转到上一张幻灯片 |
pause() | 暂停幻灯片循环 |
start() | 开始幻灯片循环(属性 interval 必须有值) |
您需要一个引用(通过 this.$refs
)来调用这些方法的轮播图实例
<template>
<b-carousel ref="myCarousel" .... >
</b-carousel>
</template>
<script>
export default {
methods: {
prev() {
this.$refs.myCarousel.prev()
},
next() {
this.$refs.myCarousel.next()
}
}
}
</script>
可访问性
轮播图通常不完全符合可访问性标准,尽管我们尝试使其尽可能地可访问。
通过 id
属性提供文档唯一值,<b-carousel>
将启用可访问性功能。强烈建议始终向所有组件添加 ID。
所有轮播图控件和指示器都有 aria 标签。可以通过设置各种 label-*
属性来自定义这些标签。
注意:此组件的动画效果取决于 prefers-reduced-motion
媒体查询。有关更多详细信息,请参阅我们可访问性文档的 减少运动部分。