改成无缝滚动且每条数据滚动有时间间隔
时间: 2024-03-24 22:40:27 浏览: 11
好的,以下是更改后的代码,实现了无缝滚动且每条数据滚动有时间间隔的效果:
```html
<template>
<div class="scroll-container">
<ul ref="list" class="scroll-list">
<li v-for="(item, index) in dataList" :key="index" :style="{animationDelay: `${(index+1) * 2}s`}">{{ item }}</li>
<li v-for="(item, index) in dataList" :key="index + 5" :style="{animationDelay: `${(index+1) * 2}s`}">{{ item }}</li>
</ul>
</div>
</template>
<script lang="ts">
import { defineComponent, ref, onMounted, onUnmounted } from 'vue';
export default defineComponent({
name: 'AutoScroll',
setup() {
const dataList = ref(['数据1', '数据2', '数据3', '数据4', '数据5']);
const listHeight = 40; // 列表项高度
const itemInterval = 2; // 每条数据滚动的时间间隔
const scrollInterval = 5000; // 更新数据间隔时间
let timer: ReturnType<typeof setInterval> | null = null;
// 更新数据列表
const updateDataList = () => {
dataList.value.push(dataList.value.shift());
};
// 开始滚动
const startScroll = () => {
timer = setInterval(() => {
updateDataList();
}, scrollInterval);
};
// 停止滚动
const stopScroll = () => {
if (timer) {
clearInterval(timer);
timer = null;
}
};
// 组件挂载后开始滚动
onMounted(() => {
startScroll();
});
// 组件卸载前停止滚动
onUnmounted(() => {
stopScroll();
});
return {
dataList,
listHeight,
itemInterval,
};
},
});
</script>
<style scoped>
.scroll-container {
position: relative;
height: 200px;
overflow: hidden;
}
.scroll-list {
position: absolute;
top: 0;
left: 0;
margin: 0;
padding: 0;
list-style: none;
animation: scrollAnimation 20s linear infinite;
}
.scroll-list li {
height: 40px;
line-height: 40px;
animation: itemAnimation 2s linear infinite;
}
@keyframes scrollAnimation {
0% {
transform: translateY(0);
}
100% {
transform: translateY(-400px);
}
}
@keyframes itemAnimation {
0% {
opacity: 0;
}
5% {
opacity: 1;
}
95% {
opacity: 1;
}
100% {
opacity: 0;
}
}
</style>
```
在上述代码中,我们添加了一个itemInterval变量来控制每条数据滚动的时间间隔,同时给每个列表项增加了一个animationDelay属性,实现了每条数据滚动的时间间隔。我们将数据列表重复一遍,并使用CSS动画实现了无缝滚动效果。因为数据列表重复一遍,所以我们将滚动时间间隔scrollInterval设置为20秒,而不是之前的5秒,以保证数据能够完整地滚动完毕。同时,我们也对CSS动画进行了一些调整,实现了数据的渐隐渐现效果。