Angular2实现的秒表及改良版示例
本文实例讲述了Angular2实现的秒表及改良版。分享给大家供大家参考,具体如下:
初版
代码:
exportclassWatches{ id:number; str:string; } exportletwatcheList: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.
缺点:
函数的运行时间不可控,所以毫秒的增加不准确。
改良版
代码:
//秒表 exportclassWatches{ id:number; value:number; } exportletwatcheList:Watches[]=[] exportclassStopwatchComponent{ //导入的静态类 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 letwatchObj: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触发定时器,获取最新时间。时间差则为最新时间减去开始时间
PS:这里再为打击推荐一款功能相似的在线工具供大家参考:
在线秒表工具:
http://tools.jb51.net/bianmin/miaobiao
更多关于AngularJS相关内容感兴趣的读者可查看本站专题:《AngularJS指令操作技巧总结》、《AngularJS入门与进阶教程》及《AngularJSMVC架构总结》
希望本文所述对大家AngularJS程序设计有所帮助。