vue 计时器组件的实现代码


Posted in Javascript onSeptember 14, 2017

整理文档,搜刮出一个vue 计时器组件的代码,稍微整理精简一下做下分享。

<template>
 <div>
  <span 
    :sendSync="sendSync" 
    :autoStart="autoStart" 
    :defaultVal="defaultVal"
  >{{countString}}</span>
 </div>
</template>
<script>
export default {
 data() {
  return {
   isStart: false,
   globalTimer: null,//获取setInterval对象值
   countString: '0秒', //用来显示时间
   day: 0,
   hour: 0,
   minute: 0,
   second: 0,
   millisecond: 0,
   countVal: this.defaultVal, //获取初始值
   pauseTime: 0,
  }
 },
 watch: {
  'countString': {
   deep: true,
   handler: function(val, oldVal) {
    var vm = this
    if (vm.needSendSunc) {
     vm.passToParent(val)
    }
   }
  },
  'needSendSunc': {
   deep: true,
   handler: function(val) {
    var vm = this
    if (val) {
     vm.passToParent(vm.countString)
    }
   }
  }
 },
 props: {
  sendSync: {
   type: Boolean,
   default: false,
  },
  autoStart: {
   type: Boolean,
   default: false,
  },
  defaultVal: {
   type: Number,
   default: 0,
  }
 },
 mounted() {
  var vm = this
  if (vm.autoStart) {
   vm.startCountFn()
  }
 },
 computed: {
  needSendSunc: function() {
   return this.sendSync
  }
 },
 created: function() {
  this.$on('startCount', function() {
   this.startCountFn()
  });
  this.$on('stopCount', function() {
   this.stopCountFn()
  });
 },
 components: {},
 methods: {
  counterFn: function(counterTime) {
   var vm = this
   var nowDate = new Date().getTime()
   if(vm.pauseTime == 0){
    var num = nowDate - counterTime //计算时间毫秒差
   }else{
    vm.pauseTime = vm.pauseTime +10
    var num = vm.pauseTime - counterTime //计算时间毫秒差
   }
   var leave1 = num % (24 * 3600 * 1000)  //计算天数后剩余的毫秒数
   var leave2 = leave1 % (3600 * 1000)    //计算小时数后剩余的毫秒数
   var leave3 = leave2 % (60 * 1000)   //计算分钟数后剩余的毫秒数
   vm.day = Math.floor(num / (24 * 3600 * 1000)) //计算相差天数
   vm.hour = Math.floor(leave1 / (3600 * 1000))//计算相差小时
   vm.minute = Math.floor(leave2 / (60 * 1000))//计算相差分钟
   vm.second = Math.round(leave3 / 1000) //计算相差秒
   if (vm.day > 0) {
    vm.countString = `${vm.day}天 ${vm.hour}小时 ${vm.minute}分 ${vm.second}秒`;
   } else if (vm.hour > 0) {
    vm.countString = `${vm.hour}小时 ${vm.minute}分 ${vm.second}秒`;
   } else if (vm.minute > 0) {
    vm.countString = `${vm.minute}分 ${vm.second}秒`;
   } else {
    vm.countString = `${vm.second}秒`;
   }
  },
  startCountFn: function() {
   var vm = this
   if (!vm.isStart) {
    vm.countVal = vm.countVal ? vm.countVal : new Date().getTime()
    var timer = setInterval(function() {
     vm.counterFn(vm.countVal)
    }, 10)
    vm.globalTimer = timer
    vm.isStart = true
   }
  },
  stopCountFn: function() {
   var vm = this
   if (vm.isStart) {
    window.clearInterval(vm.globalTimer)
    vm.globalTimer = null;
    vm.isStart = false
    vm.pauseTime = new Date().getTime()
   }
  },
  passToParent: function(data) {
   var vm = this
   this.$emit("getDataFromChild", data)
  },
 }
}
</script>
<style>

</style>

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

Javascript 相关文章推荐
JQuery中使用on方法绑定hover事件实例
Dec 09 Javascript
javascript数组去重的方法汇总
Apr 14 Javascript
使用JavaScript刷新网页的方法
Jun 04 Javascript
基于jQuery实现歌词滚动版音乐播放器的代码
Sep 17 Javascript
Es6 写的文件import 起来解决方案详解
Dec 13 Javascript
微信小程序Server端环境配置详解(SSL, Nginx HTTPS,TLS 1.2 升级)
Jan 12 Javascript
vue教程之toast弹框全局调用示例详解
Aug 24 Javascript
200行HTML+JavaScript实现年会抽奖程序
Jan 22 Javascript
vue slot与传参实例代码讲解
Apr 28 Javascript
5分钟快速看懂ES6中的反射与代理
Dec 19 Javascript
一篇文章带你浅入webpack的DLL优化打包
Feb 20 Javascript
Vue 实现监听窗口关闭事件,并在窗口关闭前发送请求
Sep 01 Javascript
详解tween.js的使用教程
Sep 14 #Javascript
JS库之wow.js使用方法
Sep 14 #Javascript
JavaScript正则表达式和级联效果
Sep 14 #Javascript
详解使用Visual Studio Code对Node.js进行断点调试
Sep 14 #Javascript
react 父组件与子组件之间的值传递的方法
Sep 14 #Javascript
分分钟学会vue中vuex的应用(入门教程)
Sep 14 #Javascript
JS中跳出循环的示例代码
Sep 14 #Javascript
You might like
php下防止单引号,双引号在接受页面转义的设置方法
2008/09/25 PHP
php调整服务器时间的方法
2015/04/03 PHP
Laravel手动返回错误码示例
2019/10/22 PHP
统计出现最多的字符次数的js代码
2010/12/03 Javascript
jquery zTree异步加载简单实例分享
2013/02/05 Javascript
js 通用订单代码
2013/12/23 Javascript
在Ubuntu系统上安装Node.JS的教程
2015/10/15 Javascript
基于javascript如何传递特殊字符
2015/11/30 Javascript
js+canvas简单绘制圆圈的方法
2016/01/28 Javascript
基于jquery编写的放大镜插件
2016/03/23 Javascript
js中获取时间new Date()的全面介绍
2016/06/20 Javascript
JavaScript实现Fly Bird小游戏
2016/12/15 Javascript
详解Node 定时器
2018/02/26 Javascript
在vue中使用公共过滤器filter的方法
2018/06/26 Javascript
js数组去重的方法总结
2019/01/18 Javascript
基于Vue插入视频的2种方法小结
2019/04/02 Javascript
微信小程序实现文件预览
2020/10/22 Javascript
[04:48]DOTA2亚洲邀请赛林书豪为VGJ加油
2017/04/01 DOTA
浅谈tensorflow1.0 池化层(pooling)和全连接层(dense)
2018/04/27 Python
Python3按一定数据位数格式处理bin文件的方法
2019/01/24 Python
python通过实例讲解反射机制
2019/10/17 Python
关于numpy中eye和identity的区别详解
2019/11/29 Python
python3将变量输入的简单实例
2020/08/19 Python
利用Python将多张图片合成视频的实现
2020/11/23 Python
美国皮靴公司自1863年:The Frye Company
2016/11/30 全球购物
法国春天百货官网:Printemps.com
2020/06/29 全球购物
大学生个人简历自我评价
2013/11/16 职场文书
项目计划书范文
2014/01/09 职场文书
三查三看党性分析材料
2014/02/18 职场文书
报关员个人职业生涯规划书
2014/03/12 职场文书
求职者怎样写自荐信
2014/04/13 职场文书
社会实践活动总结范文
2014/07/03 职场文书
银行党员批评与自我批评
2014/10/15 职场文书
2014年度个人工作总结范文
2015/03/09 职场文书
毕业论文致谢范文
2015/05/14 职场文书
Python爬取奶茶店数据分析哪家最好喝以及性价比
2022/09/23 Python