写点什么

【Vue2】文本无缝滚动

用户头像
学习委员
关注
发布于: 2021 年 01 月 31 日
【Vue2】文本无缝滚动

先来看看官方效果



靠这个页面的底部,有一个黄色背景的“游侠攻略”,里面的文本是无缝向上滚动的。


今天就来仿这个效果。



由于懒,样式就不写了,只把大概思路写出来。

这里使用了 CND 的方式引入 vue


<!DOCTYPE html><html lang="en"><head>  <meta charset="UTF-8">  <meta name="viewport" content="width=device-width, initial-scale=1.0">  <title>scroll</title>  <style>    .animatedTop {      transition: all 0.5s;      margin-top: -1.7em;    }    .scroll {      width: 100%;      background: #ffdf72;      height: 50px;      overflow: hidden;    }    ul, li {      padding: 0;      margin: 0;    }    li {      width: 100%;      overflow: hidden;      text-overflow: ellipsis;      white-space: nowrap;      margin-bottom: 5px;    }  </style></head><body>  <div id="app">    <div class="scroll">      <ul :class="{animatedTop}">        <li v-for="(item, index) in scrollList" :key="index">{{item.title}}</li>      </ul>    </div>  </div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.12"></script> <script> new Vue({ el: '#app', data: { animatedTop: false, scrollList: [ { id: 0, title: '故宫旅游指南,逛89遍紫禁城才能发现的绝佳赏花线路' }, { id: 1, title: '吃货必看西安寻吃手册|“老西安”告诉你如何打卡最地道美食' }, { id: 2, title: '【无锡旅游攻略】江南小城无限好,太湖明珠在无锡' }, { id: 3, title: '【镜头里藏着另一个世界】泰国曼谷、大城、素可泰小众景点摄影攻略' } ] }, methods: { showScroll() { this.animatedTop = true; setTimeout(() => { this.scrollList.push(this.scrollList[0]) this.scrollList.shift() this.animatedTop = false }, 500) } }, mounted() { setInterval(this.showScroll, 2000) } }) </script></body></html>
复制代码


效果(gif)


data 的数据这里用了死数据,真正项目中,这些数据都是通过 ajax 请求回来的。



理解部分:


每往上滚动一次,就要把当前排在第一行的文本移动到队伍的最后面。


CSS:通过 animatedTop 建立一个向上滚动的动画。


在 JS 部分,通过 showScroll 这个方法,控制数组。

当改方法被执行,就会激活 animatedTop 类,激活这个动画。


这个动画的执行时长是 500 毫秒,所以要改变数组的排序,就要在动画执行后才能改变,也就是延迟 500 毫秒才执行数组重排。


通过 mounted 这个钩子函数调用 showScroll 方法。


最终得到上面例子的效果。


用户头像

学习委员

关注

反派 2019.03.19 加入

哈哈哈哈哈哈哈哈哈哈哈哈哈哈

评论

发布
暂无评论
【Vue2】文本无缝滚动