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开源框架-jQuery使用手册(1)
Mar 10 Javascript
JavaScript的Cookies
Jan 16 Javascript
Javascript入门学习资料收集整理篇
Jul 06 Javascript
动态刷新 dorado树的js代码
Jun 12 Javascript
jquery处理页面弹出层查询数据等待操作实例
Mar 25 Javascript
全面了解JavaScirpt 的垃圾(garbage collection)回收机制
Jul 11 Javascript
jQuery中checkbox反复调用attr('checked', true/false)只有第一次生效的解决方法
Nov 16 Javascript
thinkphp标签实现bootsrtap轮播carousel实例代码
Feb 19 Javascript
简单谈谈关于 npm 5.0 的新坑
Jun 08 Javascript
JS中‘hello’与new String(‘hello’)引出的问题详解
Aug 14 Javascript
使用jQuery如何写一个含验证码的登录界面
May 13 jQuery
javascript实现点亮灯泡特效示例
Oct 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
使用PHP数组实现无限分类,不使用数据库,不使用递归.
2006/12/09 PHP
两个强悍的php 图像处理类1
2009/06/15 PHP
drupal 代码实现URL重写
2011/05/04 PHP
基于php-fpm的配置详解
2013/06/03 PHP
ThinkPHP3.2框架自定义配置和加载用法示例
2018/06/14 PHP
PHP封装mysqli基于面向对象的mysql数据库操作类与用法示例
2019/02/25 PHP
学习js所必须要知道的一些
2007/03/07 Javascript
Expandable &quot;Detail&quot; Table Rows
2007/08/29 Javascript
JavaScript splice()方法详解
2020/09/22 Javascript
一段非常简单的js判断浏览器的内核
2014/08/17 Javascript
EasyUI实现第二层弹出框的方法
2015/03/01 Javascript
Angular发布1.5正式版,专注于向Angular 2的过渡
2016/02/18 Javascript
jQuery 实现左右两侧菜单添加、移除功能
2018/01/02 jQuery
详解iframe跨域的几种常用方法(小结)
2019/04/29 Javascript
关于微信小程序map组件z-index的层级问题分析
2019/07/09 Javascript
layui实现三级导航菜单
2019/07/26 Javascript
基于vue+element实现全局loading过程详解
2020/07/10 Javascript
python中的yield使用方法
2014/02/11 Python
Python中http请求方法库汇总
2016/01/06 Python
解决PyCharm中光标变粗的问题
2017/08/05 Python
OpenCV-Python实现轮廓检测实例分析
2018/01/05 Python
python numpy格式化打印的实例
2018/05/14 Python
Django中间件实现拦截器的方法
2018/06/01 Python
Django中使用Json返回数据的实现方法
2020/06/03 Python
大数据分析用java还是Python
2020/07/06 Python
Python Charles抓包配置实现流程图解
2020/09/29 Python
html5 冒号分隔符对齐的实现
2019/07/31 HTML / CSS
庆元旦文艺演出主持词
2014/03/27 职场文书
社团活动总结模板
2014/06/30 职场文书
2014年保洁员工作总结
2014/11/19 职场文书
2014年骨干教师工作总结
2014/12/19 职场文书
如何写辞职书
2015/02/26 职场文书
反邪教教育心得体会
2016/01/15 职场文书
Python Parser的用法
2021/05/12 Python
mysql分表之后如何平滑上线详解
2021/11/01 MySQL
springmvc直接不经过controller访问WEB-INF中的页面问题
2022/02/24 Java/Android