vue 实现走马灯效果


Posted in Javascript onOctober 28, 2019

Part.1  问题

在写一个H5页面时遇到一个需求,头部公告需要滚动变换,需要实现一个走马灯效果

Part.2  实现

我的做法:利用 定时器 + CSS3 变换公告数组的顺序 从而实现走马灯效果

Part.3  代码

HTML

<template>
 <div class="home">
  <div class="home-box">
   <div style="background: #fdfbde">
    <div class="marquee">
     <div class="marquee_box">
      <ul class="marquee_list" :class="{marquee_top:animate}">
       <li v-for="(item, index) in announcementArr" :key="index">
        <span>{{item}}</span>
       </li>
      </ul>
     </div>
    </div>
   </div>
  </div>
 </div>
</template>

CSS

<style type="text/css">
.home {
 height: 100%;
 display: flex;
 justify-content: center;
 align-items: center;
}
.home-box {
 width: 200px;
 height: 200px;
}
.marquee {
 width: 100%;
 height: 30px;
 align-items: center;
 color: #3A3A3A;
 background-color: #fdfbde;
 display: flex;
 box-sizing: border-box;
}

.marquee_box {
 display: block;
 position: relative;
 width: 60%;
 height: 30px;
 overflow: hidden;
}

.marquee_list {
 display: block;
 position: absolute;
 top: 0;
 left: 0;
}

.marquee_top {
 transition: all 0.5s;
 margin-top: -30px
}

.marquee_list li {
 height: 30px;
 line-height: 30px;
 font-size: 12px;
 padding-left: 20px;
}

.marquee_list li span {
 padding: 0 2px;
 color: #f1543a;
}
</style>

JS

<script>
export default {
  name: 'Home',
  data() {
    return {
      announcementArr: [],
      animate: false
    }
  },
  mounted() {
    this.addAnnouncement();

    setInterval(this.showMarquee, 2000);
  },
  methods: {
    addAnnouncement: function() {
      this.announcementArr = ['测试滚动001','测试滚动002','测试滚动003','测试滚动004']
    },
    showMarquee: function() {
      this.animate = true;
      setTimeout(() => {
        this.announcementArr.push(this.announcementArr[0]);
        this.announcementArr.shift();
        this.animate = false
      }, 1000)
    }
  }
}
</script>

Part.4  注意点

在 js 中我使用的是  setInterval 中 利用 setTimeout 来调用方法

方法详解:

           setInterval  —— 会不停的调用函数

           setTimeout —— 只会执行函数一次

这么写的原因:

如果单纯的使用 setInterval 会导致页面卡死,原因与JS引擎线程有关(有兴趣的童鞋可以研究一下),setInterval  不会清除定时器队列,每次重复执行会导致定时器叠加,最终卡死网页。而 setTimeout 是自带清除定时器的

Part.5  效果

vue 实现走马灯效果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Maps Javascript
Jan 22 Javascript
JavaScript进阶教程(第四课第一部分)
Apr 05 Javascript
不用AJAX和IFRAME,说说真正意义上的ASP+JS无刷新技术
Sep 25 Javascript
javascript prototype原型操作笔记
Dec 07 Javascript
使用js写的一个简易的投票
Nov 27 Javascript
ExtJS中设置下拉列表框不可编辑的方法
May 07 Javascript
js统计录入文本框中字符的个数并加以限制不超过多少
May 23 Javascript
了不起的node.js读书笔记之例程分析
Dec 22 Javascript
javascript 广告移动特效的实现代码
Jun 25 Javascript
ionic开发中点击input时键盘自动弹出
Dec 23 Javascript
JS实现的透明度渐变动画效果示例
Apr 28 Javascript
Vue+Element实现表格编辑、删除、以及新增行的最优方法
May 28 Javascript
JS实现json数组排序操作实例分析
Oct 28 #Javascript
VUE渲染后端返回含有script标签的html字符串示例
Oct 28 #Javascript
vue实现在v-html的html字符串中绑定事件
Oct 28 #Javascript
vue 实现input表单元素的disabled示例
Oct 28 #Javascript
jquery validate 实现动态增加/删除验证规则操作示例
Oct 28 #jQuery
VUE解决 v-html不能触发点击事件的问题
Oct 28 #Javascript
vue 验证码界面实现点击后标灰并设置div按钮不可点击状态
Oct 28 #Javascript
You might like
Laravel实现autoload方法详解
2017/05/07 PHP
分享8个Laravel模型时间戳使用技巧小结
2020/02/12 PHP
Nigma vs AM BO3 第二场2.13
2021/03/10 DOTA
JSQL  一个 web DB 的封装
2010/05/05 Javascript
自定义一个jquery插件[鼠标悬浮时候 出现说明label]
2011/06/27 Javascript
jquery实现带缩略图的可定制高度画廊效果(5种)
2015/08/28 Javascript
jQuery中inArray方法注意事项分析
2016/01/25 Javascript
JavaScript tab选项卡插件实例代码
2016/02/23 Javascript
jQuery图片左右滚动代码 有左右按钮实例
2016/06/20 Javascript
JSP防止网页刷新重复提交数据的几种方法
2016/11/19 Javascript
解析利用javascript如何判断一个数为素数
2016/12/08 Javascript
微信小程序之购物车功能
2020/09/23 Javascript
jquery拖动改变div大小
2017/07/04 jQuery
详解.vue文件中监听input输入事件(oninput)
2017/09/19 Javascript
原生JS获取元素的位置与尺寸实现方法
2017/10/18 Javascript
基于vue 动态加载图片src的解决方法
2018/02/05 Javascript
vue组件中使用props传递数据的实例详解
2018/04/08 Javascript
Vue 实现一个简单的鼠标拖拽滚动效果插件
2020/12/10 Vue.js
Python字典,函数,全局变量代码解析
2017/12/18 Python
Python使用while循环花式打印乘法表
2019/01/28 Python
处理Selenium3+python3定位鼠标悬停才显示的元素
2019/07/31 Python
对Django url的几种使用方式详解
2019/08/06 Python
Python学习笔记之Django创建第一个数据库模型的方法
2019/08/07 Python
用python的turtle模块实现给女票画个小心心
2019/11/23 Python
PyCharm如何导入python项目的方法
2020/02/06 Python
Python字符串split及rsplit方法原理详解
2020/06/29 Python
移动端html5模拟长按事件的实现方法
2018/09/30 HTML / CSS
viagogo意大利票务平台:演唱会、体育比赛、戏剧门票
2018/01/26 全球购物
3分钟演讲稿
2014/04/30 职场文书
关于青春的演讲稿
2014/05/05 职场文书
长江三峡导游词
2015/01/31 职场文书
怎样写家长意见
2015/06/04 职场文书
2016年综治宣传月活动宣传标语口号
2016/03/16 职场文书
Python Pandas常用函数方法总结
2021/06/15 Python
php实例化对象的实例方法
2021/11/17 PHP
Python循环之while无限迭代
2022/04/30 Python