1.jQuery 时候实现 上下滚动很简单,基本上一个animateTop就可以了
2. vue等MVVM就有些麻烦了,因为不推荐操作DOM,专注于数据
我们可以使用
css3 transition: top 0.5s; 和改变列表的位置来实现上下文无缝滚动。下图顶部的黄字应该是滚动的(不会弄gif图~)
效果:
![](https://i-blog.csdnimg.cn/blog_migrate/19536c6765184af14ccc3b552927a240.png)
代码如下:
<template>
<div>
<div class="noticeWrap" v-if="this.data.messageList.length>0">
<div class="notice">
<ul :class="animate? 'anim':''" :style="{top}">
<li v-for="(item,index) in data.messageList" :key="index"><a @click="alertMessage(index)">{{item.alertMessageTitle}}</a></li>
</ul>
</div>
</div>
</div>
</template>
<script>
export default {
name: 'app',
data(){
return{
data:{
messageList:[]
/*可以用假数据测试
"messageList":[
{
"alertMessageTitle":"民生银行系统维护, 首付出发暂停民生银行卡还款1",
"alertMessageContent":"1尊敬的首付出发用户:由于民生银行目前处于系统维护中,维护期间首付出发支付、还款业务暂不支持民生银行卡,为保证您的还款不受影响,请使用其他银行卡进行主动还款,给您带来不便,敬请谅解~"
},
{
"alertMessageTitle":"民生银行系统维护, 首付出发暂停民生银行卡还款2",
"alertMessageContent":"2尊敬的首付出发用户:由于民生银行目前处于系统维护中,维护期间首付出发支付、还款业务暂不支持民生银行卡,为保证您的还款不受影响,请使用其他银行卡进行主动还款,给您带来不便,敬请谅解~"
},
{
"alertMessageTitle":"民生银行系统维护, 首付出发暂停民生银行卡还款3",
"alertMessageContent":"3尊敬的首付出发用户:由于民生银行目前处于系统维护中,维护期间首付出发支付、还款业务暂不支持民生银行卡,为保证您的还款不受影响,请使用其他银行卡进行主动还款,给您带来不便,敬请谅解~"
},
{
"alertMessageTitle":"民生银行系统维护, 首付出发暂停民生银行卡还款4",
"alertMessageContent":"4尊敬的首付出发用户:由于民生银行目前处于系统维护中,维护期间首付出发支付、还款业务暂不支持民生银行卡,为保证您的还款不受影响,请使用其他银行卡进行主动还款,给您带来不便,敬请谅解~"
}
]
*/
},
activeIndex: 0,
animate:true,
}
},
created(){
this.getIndex();
},
computed: {
top() {
return - this.activeIndex * 30 + 'px'; //每次动画改变这个列表的位置
}
},
methods:{
getIndex(){
//你的ajax code返回结果
if(response.data.success){
//console.log( this.data)
this.data=response.data.data;
//数据是后台动态读取,所以应该在数据可用时再弄动画,你也可以直接把假数据放在 messageList里
if(this.data.messageList.length>0){
this.scroll();
}
}else{
alert(response.data.msg);
}
},
scroll(){
let intval=setInterval(()=> {
if(this.activeIndex < this.data.messageList.length-1) {
this.activeIndex += 1;
} else {
this.activeIndex = 0;
}
}, 1000);
if(this.data.messageList.length==0){
this.activeIndex = 0;
clearInterval(intval);
}
}
}
}
</script>
<style>
.anim{
transition: top 0.5s;
position: relative;
}
</style>