用vue2在宽400px高600px的div里面用v-for渲染list: [ { name: 'csw1', event: 'hhhhh' }, { name: 'csw2', event: 'hhhhh' }, { name: 'csw3', event: 'hhhhh' }, { name: 'csw4', event: 'hhhhh' }, { name: 'csw5', event: 'hhhhh' }, { name: 'csw6', event: 'hhhhh' }, { name: 'csw7', event: 'hhhhh' }, { name: 'csw8', event: 'hhhhh' }, { name: 'csw9', event: 'hhhhh' }, { name: 'csw10', event: 'hhhhh' },, ],每条数据放在宽400px高200px的盒子里,放的顺序是从上到下,且将溢出的部分隐藏,然后做一个从下往上的轮播,速度是每2秒500px,当list中数据轮播完之后,轮播停止,在轮播停止后过了10s往list当中push十条新数据过后继续轮播
时间: 2023-04-10 18:02:26 浏览: 80
可以使用以下代码实现:
```html
<template>
<div class="container">
<div class="list-wrapper" :style="{ height: listHeight + 'px' }">
<div class="item" v-for="(item, index) in list" :key="index" :style="{ top: itemTop(index) + 'px' }">
<div class="name">{{ item.name }}</div>
<div class="event">{{ item.event }}</div>
</div>
</div>
</div>
</template>
<script>
export default {
data() {
return {
list: [
{ name: 'csw1', event: 'hhhhh' },
{ name: 'csw2', event: 'hhhhh' },
{ name: 'csw3', event: 'hhhhh' },
{ name: 'csw4', event: 'hhhhh' },
{ name: 'csw5', event: 'hhhhh' },
{ name: 'csw6', event: 'hhhhh' },
{ name: 'csw7', event: 'hhhhh' },
{ name: 'csw8', event: 'hhhhh' },
{ name: 'csw9', event: 'hhhhh' },
{ name: 'csw10', event: 'hhhhh' },
],
itemHeight: 200,
listHeight: 0,
currentIndex: 0,
timer: null,
};
},
mounted() {
this.listHeight = this.list.length * this.itemHeight;
this.startTimer();
},
methods: {
itemTop(index) {
return (index - this.currentIndex) * this.itemHeight;
},
startTimer() {
this.timer = setInterval(() => {
this.currentIndex++;
if (this.currentIndex >= this.list.length) {
clearInterval(this.timer);
setTimeout(() => {
this.list.push(
{ name: 'csw11', event: 'hhhhh' },
{ name: 'csw12', event: 'hhhhh' },
{ name: 'csw13', event: 'hhhhh' },
{ name: 'csw14', event: 'hhhhh' },
{ name: 'csw15', event: 'hhhhh' },
{ name: 'csw16', event: 'hhhhh' },
{ name: 'csw17', event: 'hhhhh' },
{ name: 'csw18', event: 'hhhhh' },
{ name: 'csw19', event: 'hhhhh' },
{ name: 'csw20', event: 'hhhhh' },
);
this.listHeight = this.list.length * this.itemHeight;
this.currentIndex = 0;
this.startTimer();
}, 10000);
}
}, 2000);
},
},
};
</script>
<style scoped>
.container {
width: 400px;
height: 600px;
overflow: hidden;
position: relative;
}
.list-wrapper {
position: absolute;
left: 0;
bottom: 0;
width: 100%;
transition: transform 0.5s ease-in-out;
}
.item {
width: 400px;
height: 200px;
position: absolute;
left: 0;
background-color: #eee;
overflow: hidden;
}
.name {
font-size: 24px;
font-weight: bold;
padding: 20px;
}
.event {
font-size: 16px;
padding: 20px;
}
</style>
```
在这个代码中,我们使用了一个 `list` 数组来存储数据,使用 `v-for` 指令渲染每个数据项,并将每个数据项放在一个宽度为 400px、高度为 200px 的盒子里。我们使用了一个 `listHeight` 变量来计算整个列表的高度,并将其应用到包裹列表的容器上,以便能够正确地显示滚动条。
我们使用了一个 `currentIndex` 变量来记录当前显示的数据项的索引,使用 `itemTop` 方法来计算每个数据项的 `top` 值,以便能够正确地定位每个数据项的位置。
我们使用了一个定时器来实现轮播效果,每隔 2 秒钟将 `currentIndex` 变量加 1,以便显示下一个数据项。当 `currentIndex` 变量超过 `list` 数组的长度时,我们清除定时器,并在 10 秒钟后向 `list` 数组中添加 10 条新数据,然后重新计算列表的高度、重置 `currentIndex` 变量,并重新启动定时器。
最后,我们使用 CSS 来设置容器和数据项的样式,以便能够正确地显示列表和滚动条。
阅读全文