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学习笔记(九)javascript中的原型(prototype)及原型链的继承方式
Apr 12 Javascript
查看源码的工具 学习jQuery源码不错的工具
Dec 26 Javascript
js触发asp.net的Button的Onclick事件应用
Feb 02 Javascript
在javaScript中关于submit和button的区别介绍
Oct 20 Javascript
瀑布流布局代码一例
Apr 11 Javascript
JQuery动画animate的stop方法使用详解
May 09 Javascript
javascript原始值和对象引用实例分析
Apr 25 Javascript
每天一篇javascript学习小结(面向对象编程)
Nov 20 Javascript
jquery常用的12个小功能
Jul 22 Javascript
vue子父组件通信的实现代码
Jul 09 Javascript
浅谈Angular文字折叠展开组件的原理分析
Nov 24 Javascript
怎样在vue项目下添加ESLint的方法
May 16 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
Yii rules常用规则示例
2016/03/15 PHP
PHP实现数据分页显示的简单实例
2016/05/26 PHP
PHP实现批量修改文件名的方法示例
2019/09/18 PHP
浏览器窗口加载和大小改变事件示例
2014/02/27 Javascript
js实现精美的图片跟随鼠标效果实例
2015/05/16 Javascript
JavaScript必知必会(九)function 说起 闭包问题
2016/06/08 Javascript
jQuery EasyUI右键菜单实现关闭标签/选项卡
2016/10/10 Javascript
利用jQuery插件imgAreaSelect实现获得选择域的图像信息
2016/12/02 Javascript
详解nodejs操作mongodb数据库封装DB类
2017/04/10 NodeJs
vue.js做一个简单的编辑菜谱功能
2018/05/08 Javascript
mpvue实现小程序签到金币掉落动画(api实现)
2019/10/17 Javascript
解决Echarts 显示隐藏后宽度高度变小的问题
2020/07/19 Javascript
Vue文本模糊匹配功能如何实现
2020/07/30 Javascript
[00:56]PWL开团时刻DAY8——追追追追追!
2020/11/09 DOTA
python的pandas工具包,保存.csv文件时不要表头的实例
2018/06/14 Python
python输出100以内的质数与合数实例代码
2018/07/08 Python
python2 与 python3 实现共存的方法
2018/07/12 Python
详解python的sorted函数对字典按key排序和按value排序
2018/08/10 Python
使用python生成杨辉三角形的示例代码
2018/08/29 Python
Python装饰器语法糖
2019/01/02 Python
Django模板标签中url使用详解(url跳转到指定页面)
2020/03/19 Python
在Anaconda3下使用清华镜像源安装TensorFlow(CPU版)
2020/04/19 Python
Python自动化测试中yaml文件读取操作
2020/08/20 Python
基于Python组装jmx并调用JMeter实现压力测试
2020/11/03 Python
css3学习系列之移动属性详解
2017/07/04 HTML / CSS
探索HTML5本地存储功能运用技巧
2016/03/02 HTML / CSS
数控机械专业个人的自我评价
2014/01/02 职场文书
我的动漫时代的创业计划书范文
2014/01/27 职场文书
培训协议书范本
2014/04/22 职场文书
房地产开发项目建议书
2014/05/16 职场文书
三好学生个人总结
2015/02/15 职场文书
听证会主持词
2015/07/03 职场文书
承诺书应该怎么写?
2019/09/10 职场文书
教你利用python实现企业微信发送消息
2021/05/23 Python
Redis中缓存穿透/击穿/雪崩问题和解决方法
2021/12/04 Redis