Angular2实现的秒表及改良版示例


Posted in Javascript onMay 10, 2019

本文实例讲述了Angular2实现的秒表及改良版。分享给大家供大家参考,具体如下:

初版

代码:

export class Watches {
  id: number;
  str: string;
}
export let watcheList: Watches[] = [{
  id: 0, str: '123456'
}, {
  id: 1, str: '564822'
}]
//watchList 是一个静态类
watchList = watcheList;
watchStr: string;
//判断是否是第一次点击startWatch
num: number = 0;
//分 秒 毫秒
minute: number = 0;
second: number = 0;
millisecond: number = 0;
//临时变量 存储计次时的时间,后加入watcheList数组
temp= {
 id: 0,
 str: '0'
};
//定时器的名字
inter: any;
constructor() { }
 resetWatch() {
   //清零
  this.millisecond = 0;
  this.second = 0;
  this.minute = 0;
  this.temp.str = '000000';
  watcheList.length = 0;
 }
timer() {
  //每隔43ms,调用该函数,所以增加43
 this.millisecond = this.millisecond + 43;
 if (this.millisecond >= 1000) {
  this.millisecond = 0;
  this.second = this.second + 1;
 }
 if (this.second >= 60) {
  this.second = 0;
  this.minute = this.minute + 1;
 }
//当小于10是,在前面加一个0,形式则变为00:00:00
 this.watchStr = (this.minute > 10 ? this.minute : '0' + this.minute) + ':'
  + (this.second > 10 ? this.second : '0' + this.second) + ':'
  + (this.millisecond > 10 ? this.millisecond : '0' + this.millisecond);
}
 startWatch(event) {
  this.num = this.num + 1;
  if (this.num > 1) {
   //该状态应该为计次
   temp.id = this.watchList.length;
   temp.str = this.watchStr;
   this.watchList.push(temp);
  } else {
   this.inter = setInterval(() => {
    this.timer();
   }, 43);
  }
 }
 stopWatch(event) {
  this.num = 0;
  if (this.inter) {
   clearInterval(this.inter);
  }
 }
}

原理:

在计时器timer函数里面,定义了一个变量毫秒millisecond,每隔43ms调用timer函数,所以millisecond每次增加43,而后1000ms之后seond增加1,60s之后,minute增加1.

缺点:

函数的运行时间不可控,所以毫秒的增加不准确。

改良版

代码:

// 秒表
export class Watches {
  id: number;
  value: number;
}
export let watcheList: Watches[] = []
export class StopwatchComponent {
 //导入的静态类
 watchList = watcheList;
 //临时变量,用来存贮计次时的时间
 temp: number;
 //判断startWatch是第一次开始,还是计次
 num: number = 0;
 //开始时间
 startTime: number;
 //当前时间
 nowTime: number;
 //时间差
 timerRunner: number = 0;
 //interval函数的名称
 inter: any;
 constructor() { }
 resetWatch() {
  //清零
  this.timerRunner = 0;
  this.watchList.length = 0;
 }
 startWatch(event) {
  this.temp = this.timerRunner;
  //开始计时的时间
  this.startTime = Date.now();
  this.num = this.num + 1;
  if (this.num > 1) {
   //当前状态为计时,将计时的数据加入进watchList
   let watchObj: Watches = {
    id: 0,
    value: 0
   }
   watchObj.id = this.watchList.length;
   watchObj.value = this.timerRunner;
   this.watchList.push(watchObj);
  } else {
   this.inter = setInterval(() => {
    this.nowTime = Date.now();
    this.timerRunner = this.temp + this.nowTime - this.startTime;
   }, 43);
  }
 }
 stopWatch(event) {
  this.num = 0;
  if (this.inter) {
   clearInterval(this.inter);
  }
 }
}

原理:当第一次点击startWatch时,获取当前时间作为开始时间,并每43ms触发定时器,获取最新时间。时间差则为最新时间减去开始时间

Javascript 相关文章推荐
Javascript 面向对象 重载
May 13 Javascript
基于jQuery的的一个隔行变色,鼠标移动变色的小插件
Jul 06 Javascript
Array的push与unshift方法性能比较分析
Mar 05 Javascript
JavaScript控制各种浏览器全屏模式的方法、属性和事件介绍
Apr 03 Javascript
jquery实现简单的表单验证
Nov 17 Javascript
Vue.js 父子组件通讯开发实例
Sep 06 Javascript
Bootstrap学习笔记之环境配置(1)
Dec 07 Javascript
Bootstrap基本模板的使用和理解1
Dec 14 Javascript
微信小程序实战之仿android fragment可滑动底部导航栏(4)
Apr 16 Javascript
原生javascript实现文件异步上传的实例讲解
Oct 26 Javascript
Vuex 单状态库与多模块状态库详解
Dec 11 Javascript
关于layui toolbar和template的结合使用方法
Sep 19 Javascript
node中IO以及定时器优先级详解
May 10 #Javascript
使用Node.js写一个代码生成器的方法步骤
May 10 #Javascript
Easyui 去除jquery-easui tab页div自带滚动条的方法
May 10 #jQuery
使用vue脚手架(vue-cli)搭建一个项目详解
May 09 #Javascript
Node.js实现用户评论社区功能(体验前后端开发的乐趣)
May 09 #Javascript
微信小程序中显示倒计时代码实例
May 09 #Javascript
微信小程序日历弹窗选择器代码实例
May 09 #Javascript
You might like
高分R级DC动画剧《哈莉·奎茵》第二季正式预告首发
2020/04/09 欧美动漫
PHP更新购物车数量(表单部分/PHP处理部分)
2013/05/03 PHP
ThinkPHP开发框架函数详解:C方法
2015/08/14 PHP
如何使用PHP Embed SAPI实现Opcodes查看器
2015/11/10 PHP
关于WordPress的SEO优化相关的一些PHP页面脚本技巧
2015/12/10 PHP
PHP常用的三种设计模式
2017/02/17 PHP
Laravel5.5 动态切换多语言的操作方式
2019/10/25 PHP
ext 同步和异步示例代码
2009/09/18 Javascript
javascript面向对象的方式实现的弹出层效果代码
2010/01/28 Javascript
web开发人员学习jQuery的6大理由及jQuery的优势介绍
2013/01/03 Javascript
用js获取电脑信息(是使用与IE浏览器)
2013/01/15 Javascript
js常用自定义公共函数汇总
2014/01/15 Javascript
js实现按钮控制图片360度翻转特效的方法
2015/02/17 Javascript
全面解析Bootstrap表单使用方法(表单按钮)
2015/11/24 Javascript
jQuery网页定位导航特效实现方法
2016/12/19 Javascript
Javascript中document.referrer隐藏来源的方法
2017/01/16 Javascript
jQuery实现遍历复选框的方法示例
2017/03/06 Javascript
mpvue构建小程序的方法(步骤+地址)
2018/05/22 Javascript
react 组件传值的三种方法
2019/06/03 Javascript
JavaScript中变量提升机制示例详解
2019/12/27 Javascript
wxPython事件驱动实例详解
2014/09/28 Python
python获取指定目录下所有文件名列表的方法
2015/05/20 Python
Python实现遍历目录的方法【测试可用】
2017/03/22 Python
解决Pycharm中import时无法识别自己写的程序方法
2018/05/18 Python
PyTorch之图像和Tensor填充的实例
2019/08/18 Python
使用python实现离散时间傅里叶变换的方法
2019/09/02 Python
python变量的作用域是什么
2020/05/26 Python
css3 border旋转时的动画应用
2016/01/22 HTML / CSS
使用HTML5做的导航条详细步骤
2020/10/19 HTML / CSS
Spotahome意大利:公寓和房间出租
2020/02/21 全球购物
公司开业庆典策划方案
2014/06/04 职场文书
关于国庆节的演讲稿
2014/09/05 职场文书
2019财务毕业实习报告
2019/06/27 职场文书
tensorflow+k-means聚类简单实现猫狗图像分类的方法
2021/04/28 Python
SQL实战演练之网上商城数据库商品类别数据操作
2021/10/24 MySQL
JavaScript模拟实现网易云轮播效果
2022/04/04 Javascript