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鼠标放上去显示悬浮层即弹出定位的div层
Apr 25 Javascript
jquery实现动态画圆
Dec 04 Javascript
JS实现FLASH幻灯片图片切换效果的方法
Mar 04 Javascript
Vue.js创建Calendar日历效果
Nov 03 Javascript
jQuery validata插件实现方法
Jun 25 jQuery
EasyUI实现下拉框多选功能
Nov 07 Javascript
Angular5中调用第三方js插件的方法
Feb 26 Javascript
解决angularJS中input标签的ng-change事件无效问题
Sep 13 Javascript
Node.js 获取微信JS-SDK CONFIG的方法示例
May 21 Javascript
过滤器vue.filters的使用方法实现
Sep 18 Javascript
详解小程序如何改变onLoad的执行时机
Nov 01 Javascript
Javascript 类型转换、封闭函数及常见内置对象操作示例
Nov 15 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
第一节--面向对象编程
2006/11/16 PHP
php算开始时间到过期时间的相隔的天数
2011/01/12 PHP
详谈PHP面向对象中常用的关键字和魔术方法
2017/02/04 PHP
基于jQuery的图片大小自动适应实现代码
2010/11/17 Javascript
jquery延迟加载外部js实现代码
2013/01/11 Javascript
IE与FF下javascript获取网页及窗口大小的区别详解
2014/01/14 Javascript
在myeclipse中如何加入jquery代码提示功能
2014/06/03 Javascript
checkbox勾选判断代码分析
2014/06/11 Javascript
在css加载完毕后自动判断页面是否加入css或js文件
2014/09/10 Javascript
基于JavaScript实现定时跳转到指定页面
2016/01/01 Javascript
简单解析JavaScript中的__proto__属性
2016/05/10 Javascript
原生js实现网易轮播图效果
2020/04/10 Javascript
微信小程序 网络API 上传、下载详解
2016/11/09 Javascript
jQuery使用DataTable实现删除数据后重新加载功能
2017/02/27 Javascript
JavaScript实现计算多边形质心的方法示例
2018/01/31 Javascript
JS实现的集合去重,交集,并集,差集功能示例
2018/03/13 Javascript
JS使用new操作符创建对象的方法分析
2019/05/30 Javascript
layui实现左侧菜单点击右侧内容区显示
2019/07/26 Javascript
环形加载进度条封装(Vue插件版和原生js版)
2019/12/04 Javascript
js模拟实现百度搜索
2020/06/28 Javascript
vue-simple-uploader上传成功之后的response获取代码
2020/09/07 Javascript
vue+高德地图实现地图搜索及点击定位操作
2020/09/09 Javascript
ES6中的类(Class)示例详解
2020/12/09 Javascript
[04:45]DOTA2-DPC中国联赛正赛 iG vs LBZS 赛后选手采访
2021/03/11 DOTA
python del()函数用法
2013/03/24 Python
浅谈python为什么不需要三目运算符和switch
2016/06/17 Python
python之当你发现QTimer不能用时的解决方法
2019/06/21 Python
Python转换时间的图文方法
2019/07/01 Python
Windows10下Tensorflow2.0 安装及环境配置教程(图文)
2019/11/21 Python
使用python爬取抖音app视频的实例代码
2020/12/01 Python
html5中使用hotcss.js实现手机端自适配的方法
2020/04/23 HTML / CSS
自动一体化专业求职信
2014/03/15 职场文书
2014党员学习兰辉先进事迹思想汇报
2014/09/17 职场文书
学生会主席任命书
2015/09/21 职场文书
2016高考寄语或鼓励的话语
2015/12/04 职场文书
小学三年级作文之写景
2019/11/05 职场文书