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 相关文章推荐
extjs form textfield的隐藏方法
Dec 29 Javascript
Node.js中AES加密和其它语言不一致问题解决办法
Mar 10 Javascript
jQuery+AJAX实现无刷新下拉加载更多
Jul 03 Javascript
js获取元素的标签名实现方法
Oct 08 Javascript
Vue.js原理分析之observer模块详解
Feb 17 Javascript
vue数据双向绑定原理解析(get &amp; set)
Mar 08 Javascript
js下拉菜单生成器dropMenu使用方法详解
Aug 01 Javascript
JavaScript全屏和退出全屏事件总结(附代码)
Aug 17 Javascript
JS简单获得节点元素的方法示例
Feb 10 Javascript
react 父子组件之间通讯props
Sep 08 Javascript
基于Koa2写个脚手架模拟接口服务的方法
Nov 27 Javascript
vue分页器组件编写方法详解
Jun 28 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实现的遍历文件夹下所有文件,编辑删除
2010/01/05 PHP
php 正确解码javascript中通过escape编码后的字符
2010/01/28 PHP
thinkphp5 URL和路由的功能详解与实例
2017/12/26 PHP
PHP实现单文件、多个单文件、多文件上传函数的封装示例
2019/09/02 PHP
tp5框架前台无限极导航菜单类实现方法分析
2020/03/29 PHP
extjs grid取到数据而不显示的解决
2008/12/29 Javascript
关于jQuery $.isNumeric vs. $.isNaN vs. isNaN
2013/04/15 Javascript
基于jQuery.Validate验证库知识点的详解
2013/04/26 Javascript
使用jQuery实现的掷色子游戏动画效果
2014/03/14 Javascript
深入浅析javascript立即执行函数
2015/10/23 Javascript
基于jQuery实现的双11天猫拆红包抽奖效果
2015/12/01 Javascript
解决jquery无法找到其他父级子集问题的方法
2016/05/10 Javascript
用原生js统计文本行数的简单示例
2016/08/19 Javascript
Angularjs的$http异步删除数据详解及实例
2017/07/27 Javascript
利用node.js+mongodb如何搭建一个简单登录注册的功能详解
2017/07/30 Javascript
JS获取一个表单字段中多条数据并转化为json格式
2017/10/17 Javascript
vue 通过下拉框组件学习vue中的父子通讯
2017/12/19 Javascript
webpack配置导致字体图标无法显示的解决方法
2018/03/06 Javascript
总结javascript三元运算符知识点
2018/09/28 Javascript
Vue + Node.js + MongoDB图片上传组件实现图片预览和删除功能详解
2020/04/29 Javascript
Python的collections模块中namedtuple结构使用示例
2016/07/07 Python
Python使用SocketServer模块编写基本服务器程序的教程
2016/07/12 Python
Python的时间模块datetime详解
2017/04/17 Python
python 构造三维全零数组的方法
2018/11/12 Python
24式加速你的Python(小结)
2019/06/13 Python
Reebok俄罗斯官方网上商店:购买锐步运动服装和鞋子
2016/09/26 全球购物
SmartBuyGlasses英国:购买太阳镜和眼镜
2018/01/29 全球购物
澳大利亚天然护肤品、化妆品和健康产品一站式商店:Nourished Life
2018/12/02 全球购物
百度软件工程师职位
2013/02/14 面试题
入党积极分子思想汇报
2014/01/02 职场文书
护士毕业实习感言
2014/03/05 职场文书
实验室的标语
2014/06/20 职场文书
人事专员岗位说明书
2014/07/29 职场文书
毕业设计致谢语
2015/05/14 职场文书
学校体育节班级口号
2015/12/25 职场文书
Python爬取科目四考试题库的方法实现
2021/03/30 Python