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 相关文章推荐
javaScript Array(数组)相关方法简述
Jul 25 Javascript
基于jQuery的日期选择控件
Oct 27 Javascript
谷歌地图打不开的解决办法
Aug 07 Javascript
javascript常见操作汇总
Sep 03 Javascript
JavaScript实现可拖拽的拖动层Div实例
Aug 05 Javascript
轻松学习jQuery插件EasyUI EasyUI创建菜单与按钮
Nov 30 Javascript
jquery实现折叠菜单效果【推荐】
Mar 08 Javascript
微信小程序日历组件calendar详解及实例
Jun 08 Javascript
jQuery获取随机颜色的实例代码
May 21 jQuery
Vue-Cli 3.0 中配置高德地图的两种方式
Jun 19 Javascript
nuxt 页面路由配置,主页轮播组件开发操作
Nov 05 Javascript
JavaScript实现点击出现子菜单效果
Feb 08 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
Discuz Uchome ajaxpost小技巧
2011/01/04 PHP
javascript instanceof 内部机制探析
2010/10/15 Javascript
Jquery上传插件 uploadify v3.1使用说明
2012/06/18 Javascript
JS去除右边逗号的简单方法
2013/07/03 Javascript
检测一个函数是否是JavaScript原生函数的小技巧
2015/03/13 Javascript
JavaScript使用键盘输入控制实现数字验证功能
2016/08/19 Javascript
详解vuex commit保存数据技巧
2018/12/25 Javascript
Vue内部渲染视图的方法
2019/09/02 Javascript
微信小程序自定义菜单切换栏tabbar组件代码实例
2019/12/30 Javascript
一文秒懂JavaScript构造函数、实例、原型对象以及原型链
2020/08/25 Javascript
[04:30]显微镜下的DOTA2第五期——拉比克
2013/09/26 DOTA
[02:27]2018DOTA2亚洲邀请赛趣味视频之钓鱼大赛 谁是垂钓冠军?
2018/04/05 DOTA
全面了解Nginx, WSGI, Flask之间的关系
2018/01/09 Python
python实现图像识别功能
2018/01/29 Python
TensorFlow实现Batch Normalization
2018/03/08 Python
详解Python 多线程 Timer定时器/延迟执行、Event事件
2019/06/27 Python
python生成特定分布数的实例
2019/12/05 Python
python获取网络图片方法及整理过程详解
2019/12/20 Python
tensorflow实现tensor中满足某一条件的数值取出组成新的tensor
2020/01/04 Python
python如何获取apk的packagename和activity
2020/01/10 Python
浅谈keras.callbacks设置模型保存策略
2020/06/18 Python
pycharm全局搜索的具体步骤
2020/07/28 Python
html5嵌入内容_动力节点Java学院整理
2017/07/07 HTML / CSS
轻化专业学生实习自我鉴定
2013/09/20 职场文书
新学期开学寄语
2014/01/18 职场文书
小学班长竞选演讲稿
2014/04/24 职场文书
诚实守信演讲稿
2014/09/01 职场文书
教师师德考核自我评价
2014/09/13 职场文书
党的群众路线教育实践活动对照检查材料思想汇报
2014/09/19 职场文书
公司租房协议书范本
2014/10/08 职场文书
2014年出纳工作总结与计划
2014/12/09 职场文书
督导岗位职责
2015/02/04 职场文书
2015年库房工作总结
2015/04/30 职场文书
小学教师读书笔记
2015/07/01 职场文书
python for循环赋值问题
2021/06/03 Python
Go语言基础函数基本用法及示例详解
2021/11/17 Golang