参考资料:
https://www.jq22.com/webqd82
https://cn.vuejs.org/v2/guide/transitions.html
首先是用jquery的实现方法:
$(function() {
//获得当前<ul>
var $uList = $(".scroll-box ul");
var timer = null;
//触摸清空定时器
$uList.hover(function() {
clearInterval(timer);
},
function() { //离开启动定时器
timer = setInterval(function() {
scrollList($uList);
},
2000);
}).trigger("mouseleave"); //自动触发触摸事件
//滚动动画
function scrollList(obj) {·
//获得当前<li>的高度
var scrollHeight = $("ul li:first").height();
//滚动出一个<li>的高度
$uList.stop().animate({
marginTop: -scrollHeight
},
600,
function() {
//动画结束后,将当前<ul>marginTop置为初始值0状态,再将第一个<li>拼接到末尾。
$uList.css({
marginTop: 0
}).find("li:first").appendTo($uList);
});
}
});
Vue实现方案
//Vue 提供了 transition 的封装组件,在下列情形中,可以给任何元素和组件添加进入/离开过渡
<transition name="slide">
<p class="text" :key="text.id">{{text.val}}</p>
</transition>
export default {
name: 'scroll',
data () {
return {
textArr: [
'1 第一条公告',
'2 第二条公告第二条公告',
'3 第三条公告第三条公告第三条公告'
],
number: 0
}
},
computed: {
text () {
return {
id: this.number,
val: this.textArr[this.number]
}
}
},
mounted () {
this.startMove()
},
methods: {
startMove () {
// eslint-disable-next-line
let timer = setTimeout(() => {
if (this.number === 2) {
this.number = 0;
} else {
this.number += 1;
}
this.startMove();
}, 2000); // 滚动不需要停顿则将2000改成动画持续时间
}
}
}
</script>
<style scoped>
h2 {
padding: 20px 0
}
.textBox {
width: 100%;
height: 40px;
margin: 0 auto;
overflow: hidden;
position: relative;
text-align: center;
}
.text {
width: 100%;
position: absolute;
bottom: 0;
}
//css过渡类名,文档可查
.slide-enter-active, .slide-leave-active {
transition: all 0.5s linear;
}
.slide-enter{
transform: translateY(20px) scale(1);
opacity: 1;
}
.slide-leave-to {
transform: translateY(-20px) scale(0.8);
opacity: 0;
}
</style>