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 相关文章推荐
js 延迟加载 改变JS的位置加快网页加载速度
Dec 11 Javascript
Jquery为单选框checkbox绑定单击click事件
Dec 18 Javascript
jQuery圆形统计图开发实例
Jan 04 Javascript
JavaScript设计模式学习之“类式继承”
Mar 12 Javascript
JavaScript中实现Map的示例代码
Sep 09 Javascript
window.location.reload 刷新使用分析(去对话框)
Nov 11 Javascript
jQuery的层级查找方式分析
Jun 16 Javascript
angular directive的简单使用总结
May 24 Javascript
详解如何解决vue开发请求数据跨域的问题(基于浏览器的配置解决)
Nov 12 Javascript
利用Vue构造器创建Form组件的通用解决方法
Dec 03 Javascript
vue实现购物车功能(商品分类)
Apr 20 Javascript
比较node.js和Deno
Apr 27 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 缓冲的免费实现方法
2006/10/09 PHP
PHP类中的魔术方法(Magic Method)简明总结
2014/07/08 PHP
WordPress中设置Post Type自定义文章类型的实例教程
2016/05/10 PHP
Laravel框架实现定时Task Scheduling例子
2019/10/22 PHP
php正则表达式使用方法整理集合
2020/01/31 PHP
IE8 浏览器Cookie的处理
2009/01/31 Javascript
onclick与listeners的执行先后问题详细解剖
2013/01/07 Javascript
jQuery中width()方法用法实例
2014/12/24 Javascript
JavaScript替换当前页面的方法
2015/04/03 Javascript
JavaScript实现跑马灯抽奖活动实例代码解析与优化(二)
2016/02/16 Javascript
js获取隐藏元素宽高的实现方法
2016/05/19 Javascript
限制复选框最多选择项的实现代码
2016/05/30 Javascript
jQuery soColorPacker 网页拾色器
2016/06/22 Javascript
前端框架Vue.js构建大型应用浅析
2016/09/12 Javascript
Vue实现路由跳转和嵌套
2017/06/20 Javascript
nodejs创建简易web服务器与文件读写的实例
2017/09/07 NodeJs
用ES6的class模仿Vue写一个双向绑定的示例代码
2018/04/20 Javascript
vue实现pdf导出解决生成canvas模糊等问题(推荐)
2018/10/18 Javascript
jQuery内容过滤选择器与子元素过滤选择器用法实例分析
2019/02/20 jQuery
JS中的防抖与节流及作用详解
2019/04/01 Javascript
JavaScript类的继承多种实现方法
2020/05/30 Javascript
如何使用jQuery操作Cookies方法解析
2020/09/08 jQuery
[42:20]2014 DOTA2华西杯精英邀请赛5 24 DK VS NewBee
2014/05/25 DOTA
[01:39:04]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第二场 2月1日
2021/03/11 DOTA
python爬虫入门教程之糗百图片爬虫代码分享
2014/09/02 Python
Python单向链表和双向链表原理与用法实例详解
2018/08/31 Python
Python collections模块使用方法详解
2019/08/28 Python
python下载库的步骤方法
2019/10/12 Python
python 实现Flask中返回图片流给前端展示
2020/01/09 Python
Python Numpy 控制台完全输出ndarray的实现
2020/02/19 Python
python-sys.stdout作为默认函数参数的实现
2020/02/21 Python
python多线程实现同时执行两个while循环的操作
2020/05/02 Python
计算机开发个人求职信范文
2013/09/26 职场文书
企业委托书范本
2014/09/13 职场文书
新闻发布会活动策划方案
2014/09/15 职场文书
oracle重置序列从0开始递增1
2022/02/28 Oracle