Banner 轮播图
轮播图组件,支持自动播放、手势滑动、自定义样式等功能。适用于图片展示、广告位、产品推荐等场景。
基础参数
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|---|---|---|---|---|
| pt | 样式透传配置 | PassThrough | - | - |
| list | 轮播项列表(图片链接) | string[] | - | [] |
| previousMargin | 前一个轮播项的左边距 | number | - | 0 |
| nextMargin | 后一个轮播项的右边距 | number | - | 0 |
| autoplay | 是否自动轮播 | boolean | - | true |
| interval | 自动轮播间隔时间(毫秒) | number | - | 5000 |
| showDots | 是否显示指示器圆点 | boolean | - | true |
| disableTouch | 是否禁用手势滑动 | boolean | - | false |
| height | 轮播容器高度 | number | string | - | 300 |
事件
| 事件名 | 说明 | 回调参数 |
|---|---|---|
| change | 轮播项切换时触发 | (value: number) |
| item-tap | 点击轮播项时触发 | (index: number) |
PassThrough
样式透传配置对象,用于深度自定义组件内部元素的样式。
| 参数 | 说明 | 类型 |
|---|---|---|
| className | 组件根元素样式 | string |
| item | 轮播项容器的配置 | PassThroughProps |
| itemActive | 当前激活轮播项的配置 | PassThroughProps |
| image | 轮播图片的配置 | PassThroughProps |
| dots | 指示器容器的配置 | PassThroughProps |
| dot | 指示器圆点的配置 | PassThroughProps |
| dotActive | 激活指示器圆点的配置 | PassThroughProps |
示例
基础用法
最简单的轮播图使用方式,传入图片链接数组即可。
html
<cl-banner :list="list"></cl-banner>
<script lang="ts" setup>
import { ref } from "vue";
const list = ref<string[]>([
"https://uni-docs.cool-js.com/demo/pages/demo/static/bg1.png",
"https://uni-docs.cool-js.com/demo/pages/demo/static/bg2.png",
"https://uni-docs.cool-js.com/demo/pages/demo/static/bg3.png",
]);
</script>自定义配置
设置自动播放间隔、高度等属性。
html
<cl-banner
:list="list"
:autoplay="true"
:interval="3000"
:height="200"
:show-dots="true"
></cl-banner>
<script lang="ts" setup>
import { ref } from "vue";
const list = ref<string[]>([
"https://uni-docs.cool-js.com/demo/pages/demo/static/bg1.png",
"https://uni-docs.cool-js.com/demo/pages/demo/static/bg2.png",
"https://uni-docs.cool-js.com/demo/pages/demo/static/bg3.png",
]);
</script>禁用手势滑动
适用于某些场景下需要禁止用户手动滑动的情况。
html
<cl-banner :list="list" :disable-touch="true"></cl-banner>
<script lang="ts" setup>
import { ref } from "vue";
const list = ref<string[]>([
"https://uni-docs.cool-js.com/demo/pages/demo/static/bg1.png",
"https://uni-docs.cool-js.com/demo/pages/demo/static/bg2.png",
"https://uni-docs.cool-js.com/demo/pages/demo/static/bg3.png",
]);
</script>事件处理
监听轮播图的切换和点击事件。
html
<cl-banner :list="list" @change="onChange" @item-tap="onClick"></cl-banner>
<script lang="ts" setup>
import { ref } from "vue";
const list = ref<string[]>([
"https://uni-docs.cool-js.com/demo/pages/demo/static/bg1.png",
"https://uni-docs.cool-js.com/demo/pages/demo/static/bg2.png",
"https://uni-docs.cool-js.com/demo/pages/demo/static/bg3.png",
]);
function onChange(current: number) {
console.log(`当前轮播项索引: ${current}`);
}
function onClick(index: number) {
console.log(`点击了第 ${index + 1} 个轮播项`);
// 处理点击逻辑,如跳转页面
}
</script>卡片式轮播
通过设置边距和缩放效果,实现卡片式轮播展示。
html
<cl-banner
:list="list"
:pt="{
className: 'mx-[-12rpx]',
item: {
className: parseClass(['scale-y-80 !px-[12rpx] transition-transform']),
},
itemActive: {
className: parseClass(['!scale-y-100']),
},
}"
:previous-margin="40"
:next-margin="40"
></cl-banner>
<script lang="ts" setup>
import { ref } from "vue";
import { parseClass } from "@/cool";
const list = ref<string[]>([
"https://uni-docs.cool-js.com/demo/pages/demo/static/bg1.png",
"https://uni-docs.cool-js.com/demo/pages/demo/static/bg2.png",
"https://uni-docs.cool-js.com/demo/pages/demo/static/bg3.png",
]);
</script>自定义指示器样式
自定义指示器圆点的样式和位置。
html
<cl-banner
:list="list"
:pt="{
dots: {
className: parseClass(['!bottom-[20rpx]']),
},
dot: {
className: parseClass(['!w-[16rpx] !h-[16rpx] !bg-white/50']),
},
dotActive: {
className: parseClass(['!w-[32rpx] !bg-white !rounded-[8rpx]']),
},
}"
></cl-banner>
<script lang="ts" setup>
import { ref } from "vue";
import { parseClass } from "@/cool";
const list = ref<string[]>([
"https://uni-docs.cool-js.com/demo/pages/demo/static/bg1.png",
"https://uni-docs.cool-js.com/demo/pages/demo/static/bg2.png",
"https://uni-docs.cool-js.com/demo/pages/demo/static/bg3.png",
]);
</script>露出式轮播
显示部分前后轮播项,营造层次感。
html
<cl-banner
:list="list"
:pt="{
className: 'mx-[-12rpx]',
item: {
className: parseClass(['px-[12rpx]']),
},
}"
:next-margin="40"
></cl-banner>
<script lang="ts" setup>
import { ref } from "vue";
import { parseClass } from "@/cool";
const list = ref<string[]>([
"https://uni-docs.cool-js.com/demo/pages/demo/static/bg1.png",
"https://uni-docs.cool-js.com/demo/pages/demo/static/bg2.png",
"https://uni-docs.cool-js.com/demo/pages/demo/static/bg3.png",
]);
</script>


