Marquee 跑马灯
Marquee 跑马灯组件用于展示图片或内容的循环滚动效果,支持横向和纵向两种滚动方向。通过配置参数可以自定义滚动速度、间距、单项尺寸等,适用于广告轮播、信息公告等场景。组件还支持方法调用控制动画的开始、暂停、重置等操作,并提供插槽和样式透传能力,方便进行深度定制。
基础参数
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|---|---|---|---|---|
| pt | 样式透传配置,用于自定义组件内部元素样式 | PassThrough | - | - |
| list | 图片列表 | string[] | - | [] |
| direction | 滚动方向 | "horizontal" | "vertical" | - | "horizontal" |
| duration | 一次滚动的持续时间 | number | - | 5000 |
| itemHeight | 图片高度 | number | string | - | 200 |
| itemWidth | 图片宽度(仅横向滚动时生效,纵向为 100%) | number | string | - | 300 |
| gap | 间距 | number | string | - | 20 |
方法
| 方法名 | 说明 | 参数 |
|---|---|---|
| start | 开始滚动动画 | - |
| stop | 停止滚动动画 | - |
| reset | 重置滚动动画 | - |
| pause | 暂停滚动动画 | - |
| play | 播放滚动动画 | - |
PassThrough
支持深度自定义组件内部元素样式,提供企业级的样式控制能力。
| 属性名 | 说明 | 类型 |
|---|---|---|
| className | 组件根容器的样式类名 | string |
| list | 列表区域的配置 | PassThroughProps |
| item | 单个项的配置 | PassThroughProps |
| image | 图片的配置 | PassThroughProps |
插槽
| 插槽名 | 说明 | 参数 | 使用场景 |
|---|---|---|---|
| item | 每个项内容 | { item: MarqueeItem; index: number } | 搜索框、筛选器等 |
类型
ts
type MarqueeItem = {
url: string;
originalIndex: number;
};示例
横向滚动
设置参数
direction="horizontal",启用横向滚动模式通过
item-height和item-width分别指定每项的高度和宽度
vue
<template>
<cl-marquee
:list="list"
direction="horizontal"
:item-height="200"
:item-width="360"
:pt="{
className: 'h-[200rpx] rounded-xl',
}"
></cl-marquee>
</template>
<script setup lang="ts">
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>纵向滚动
设置参数
direction="vertical",启用纵向滚动模式通过
item-height指定每项的高度,纵向滚动时宽度默认为100%(如需调整宽度,可通过外层容器控制)使用
h-[200rpx]类名可灵活控制可视区域的高度范围
vue
<template>
<cl-marquee
:list="list"
direction="vertical"
:item-height="200"
:pt="{
className: 'h-[200rpx] rounded-xl',
}"
></cl-marquee>
</template>
<script setup lang="ts">
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>调用开始、暂停
请确保类型声明为
ClMarqueeComponentPublicInstance | null,以保证类型安全。在调用实例方法时,务必使用
!.运算符来断言非空,例如:marqueeRef.value!.play()。
vue
<template>
<cl-marquee
ref="marqueeRef"
:list="list"
direction="vertical"
:item-height="200"
:pt="{
className: 'h-[200rpx] rounded-xl',
}"
></cl-marquee>
</template>
<script setup lang="ts">
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",
]);
const marqueeRef = ref<ClMarqueeComponentPublicInstance | null>(null);
function play() {
marqueeRef.value!.play();
}
function pause() {
marqueeRef.value!.pause();
}
</script>


