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中增加参数与Json转换代码
Nov 20 Javascript
IE与Firefox在JavaScript上的7个不同句法分享
Oct 30 Javascript
Bootstrap实现下拉菜单效果
Apr 29 Javascript
深入理解js generator数据类型
Aug 16 Javascript
JS实现手写parseInt的方法示例
Sep 24 Javascript
vue组件之Alert的实现代码
Oct 17 Javascript
利用jQuery实现简单的拖曳效果实例代码
Oct 20 jQuery
React props和state属性的具体使用方法
Apr 12 Javascript
Angularjs中的$apply及优化使用详解
Jul 02 Javascript
React Native 混合开发多入口加载方式详解
Sep 23 Javascript
Js实现复选框的全选、全不选反选功能代码实例
Feb 28 Javascript
vue引入静态js文件的方法
Jun 20 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/10/09 PHP
PHP中文乱码解决方案
2015/03/05 PHP
微信获取用户地理位置信息的原理与步骤
2015/11/12 PHP
PHP实现十进制、二进制、八进制和十六进制转换相关函数用法分析
2017/04/25 PHP
Javascript的匿名函数小结
2009/12/31 Javascript
ajax页面无刷新 IE下遭遇Ajax缓存导致数据不更新的问题
2012/12/11 Javascript
javascript中验证大写字母、数字和中文
2014/01/15 Javascript
JS数组array元素的添加和删除方法代码实例
2015/06/01 Javascript
jquery点击缩略图切换视频播放特效代码分享
2015/09/15 Javascript
Bootstrap源码解读模态弹出框(11)
2016/12/28 Javascript
解读vue生成的文件目录结构及说明
2017/11/27 Javascript
vue中element 上传功能的实现思路
2018/07/06 Javascript
jQuery实现鼠标移入移出事件切换功能示例
2018/09/06 jQuery
基于vue的tab-list类目切换商品列表组件的示例代码
2020/02/14 Javascript
举例区分Python中的浅复制与深复制
2015/07/02 Python
Python批量提取PDF文件中文本的脚本
2018/03/14 Python
Python+OpenCV实现车牌字符分割和识别
2018/03/31 Python
如何利用python查找电脑文件
2018/04/27 Python
解决pycharm运行时interpreter为空的问题
2018/10/29 Python
Python使用ctypes调用C/C++的方法
2019/01/29 Python
对Python的多进程锁的使用方法详解
2019/02/18 Python
复化梯形求积分实例——用Python进行数值计算
2019/11/20 Python
Python中顺序表原理与实现方法详解
2019/12/03 Python
移动web模拟客户端实现多方框输入密码效果【附代码】
2016/03/25 HTML / CSS
html5跨域通讯之postMessage的用法总结
2013/11/07 HTML / CSS
美国最受欢迎的度假目的地优惠套餐:BookVIP
2018/09/27 全球购物
static全局变量与普通的全局变量有什么区别
2014/05/27 面试题
护士自我鉴定总结
2014/03/24 职场文书
个人廉洁自律承诺书
2014/03/27 职场文书
心理健康日活动总结
2014/05/08 职场文书
小学德育工作经验交流材料
2014/05/22 职场文书
四风自我剖析材料思想汇报
2014/10/01 职场文书
简历中自我评价范文
2015/03/11 职场文书
刘胡兰观后感
2015/06/16 职场文书
HR必备:超全面的薪酬待遇管理方案!
2019/07/12 职场文书
Go微服务项目配置文件的定义和读取示例详解
2022/06/21 Golang