vue实现消息的无缝滚动效果

html部分

<div id="box">
            <ul id="con1" ref="con1" :class="{anim:animate==true}">
                <li v-for='item in items'>{{item.name}}</li>
            </ul>
 </div>

js部分

export default {
data() {
  return {
      animate:false,
      items:[
       {name:"31省新增本土确诊15例 在北京辽宁",src:'https://baijiahao.baidu.com/s?id=1687369032725776034&wfr=spider&for=pc'},
                     {name:"\"西藏冒险王\"跌落冰河前画面曝光",src:'https://www.thepaper.cn/newsDetail_forward_10577786'},
                     {name:"2021春运车票明起开售",src: 'https://baijiahao.baidu.com/s?id=1687338890195020556&wfr=spider&for=pc'}
      ]
  }
},
created(){
    setInterval(this.scroll,1000)
},
methods: {
    scroll(){
       this.animate=true;    // 因为在消息向上滚动的时候需要添加css3过渡动画,所以这里需要设置true
       setTimeout(()=>{      //  这里直接使用了es6的箭头函数,省去了处理this指向偏移问题,代码也比之前简化了很多
               this.items.push(this.items[0]);  // 将数组的第一个元素添加到数组的
               this.items.shift();               //删除数组的第一个元素
               this.animate=false;  // margin-top 为0 的时候取消过渡动画,实现无缝滚动
       },500)
    }
}

css部分

   #box{
            width: 300px;
            height: 32px;
            overflow: hidden;
            margin: 200px auto;
            padding-left: 30px;
            border: 1px solid black;
        }
        .anim{
            transition: all 0.5s;
            margin-top: -30px;
        }
        #con1 li{
            list-style: none;
            line-height: 30px;
            height: 30px;
        }

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容