<template>
<div id="box">
<div
id="con1"
ref="con1"
:class="{anim:animate==true}"
@mouseenter="mEnter"
@mouseleave="mLeave"
>
<p v-for="(item,index) in items" :key="index">中奖人的名字是--{{item.name}}</p>
</div>
</div>
</template>
<script>
export default {
data() {
return {
animate: false,
items: [
//消息列表对应的数组
{ name: "Kobe Bean Bryant" },
{ name: "Kyrie Irving" },
{ name: "Dwyane Wade" },
{ name: "Pau Gasol" },
{ name: "Dwight Howard" },
{ name: "DeMarcus Cousins" },
{ name: "Kevin Durant" }
]
};
},
mounted() {
this.timer1 = setInterval(this.scroll, 1000);
},
methods: {
scroll() {
let con1 = this.$refs.con1;
con1.style.marginTop = "-30px";
this.animate = !this.animate;
var that = this; // 在异步函数中会出现this的偏移问题,此处一定要先保存好this的指向
setTimeout(function() {
that.items.push(that.items[0]);
that.items.shift();
con1.style.marginTop = "0px";
that.animate = !that.animate; // 这个地方如果不把animate 取反会出现消息回滚的现象,此时把ul 元素的过渡属性取消掉就可以完美实现无缝滚动的效果了
}, 500);
},
mEnter() {
clearInterval(this.timer1);
},
mLeave() {
this.timer1 = setInterval(this.scroll, 1000);
}
}
};
</script>
<style scoped>
* {
margin: 0;
padding: 0;
}
#box {
width: 300px;
height: 175px;
line-height: 30px;
overflow: hidden;
padding-left: 30px;
border: 1px solid #ffffff;
transition: all 0.5s;
}
.anim {
transition: all 0.5s;
}
#con1 li {
list-style: none;
line-height: 30px;
height: 30px;
}
</style>
当我们鼠标在上边时停止,离开继续滚动

