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实现锚点(Anchor)间平滑跳转
Sep 08 Javascript
JavaScript 判断指定字符串是否为有效数字
May 11 Javascript
通过jquery的$.getJSON做一个跨域ajax请求试验
May 03 Javascript
基于jquery点击自以外任意处,关闭自身的代码
Feb 10 Javascript
原生js实现淘宝首页点击按钮缓慢回到顶部效果
Apr 06 Javascript
jQuery实现表单步骤流程导航代码分享
Aug 28 Javascript
jQuery Easyui实现左右布局
Jan 26 Javascript
JS创建事件的三种方法(实例代码)
May 12 Javascript
BootStrap中Datepicker控件带中文的js文件
Aug 10 Javascript
基于JavaScript实现右键菜单和拖拽功能
Nov 28 Javascript
js实现颜色阶梯渐变效果(Gradient算法)
Mar 21 Javascript
vue组件中使用iframe元素的示例代码
Dec 13 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+redis实现的悲观锁机制示例
2018/06/12 PHP
laravel框架select2多选插件初始化默认选中项操作示例
2020/02/18 PHP
juqery 学习之五 文档处理 插入
2011/02/11 Javascript
jquery对象和DOM对象的区别介绍
2013/08/09 Javascript
EasyUI中实现form表单提交的示例分享
2015/03/01 Javascript
javascript实现倒计时(精确到秒)
2015/06/26 Javascript
JavaScript小技巧整理篇(非常全)
2016/01/26 Javascript
详解前端构建工具gulpjs的使用介绍及技巧
2017/01/19 Javascript
AngularJS模糊查询功能实现代码(过滤内容下拉菜单排序过滤敏感字符验证判断后添加表格信息)
2017/10/24 Javascript
nodejs简单实现TCP服务器端和客户端的聊天功能示例
2018/01/04 NodeJs
重学 JS:为啥 await 不能用在 forEach 中详解
2019/04/15 Javascript
vue实现滑动超出指定距离回顶部功能
2019/07/31 Javascript
Vue实现简单的拖拽效果
2020/08/25 Javascript
[02:44]DOTA2英雄基础教程 钢背兽
2013/12/19 DOTA
Python中的闭包实例详解
2014/08/29 Python
python编码总结(编码类型、格式、转码)
2016/07/01 Python
python ipset管理 增删白名单的方法
2019/01/14 Python
使用python socket分发大文件的实现方法
2019/07/08 Python
在OpenCV里使用特征匹配和单映射变换的代码详解
2019/10/23 Python
Python装饰器实现方法及应用场景详解
2020/03/26 Python
django使用graphql的实例
2020/09/02 Python
Love, Bonito国际官网:新加坡女装品牌
2021/03/13 全球购物
大学生应聘推荐信范文
2013/11/19 职场文书
思想政治教育专业个人求职信范文
2013/12/20 职场文书
《东方明珠》教学反思
2014/04/20 职场文书
期末评语大全
2014/05/04 职场文书
文明礼貌演讲稿
2014/05/12 职场文书
社团活动总结怎么写
2014/06/30 职场文书
2014年助理政工师工作总结
2014/12/19 职场文书
体育活动总结
2015/02/04 职场文书
运动会加油稿
2015/07/22 职场文书
2016年大学迎新工作总结
2015/10/14 职场文书
《文化苦旅》读后感:阅读,让人诗意地栖居在大地上
2019/12/24 职场文书
如何使用PyCharm及常用配置详解
2021/06/03 Python
centos7安装mysql5.7经验记录
2022/05/02 Servers
Win10加载疑难解答时出错发生意外错误的解决方法
2022/07/07 数码科技