目的:一个秒表类,开始计时后,可以暂停,可以继续,可以返回总共计时时间,可在设置回调函数不断刷新页面,同时可以记录暂停次数。返回时间为总共计时毫秒数
var Stopwatch=function(){"use strict"; var that={}; that.showtime=500; //默认回调间隔时间 that.run=false; //记录运行状态 that.startTime=0; //开始计时时间 that.pause={sum:0,num:0,time:0}; that.onShow=function(time){}; //设置回调函数 that.start=function(){ //开始计时返回true 若早已开始返回false if(that.run==false){ //如果没有计时 that.run=true; //开始计时 var nowTime=new Date(); if(that.startTime==0)that.startTime=nowTime.getTime(); //若计时起始值为0,设置当前为起始值 if(that.pause.time>0){ //若在上次停止时间大于0,说明之前暂停了 that.sum+=nowTime.getTime()-that.pause.time; //记录暂停总时间 }return true; }return false; }; that.stop=function(){ //停止返回true,若不需要停止,返回false if(that.run==true){ //正在计时 that.run=false; //停止 that.pause.num++; //暂停次数增加 var nowTime=new Date(); that.pause.time=nowTime.getTime(); //记录暂停其实时间 return true; }return false; }; that.get=function(){ //返回当前总耗时 if(that.run==true){ //正在运行从当前时间算起,否则从暂停点算起 var nowTime=new Date(); return nowTime.getTime()-that.startTime-that.pause.sum; }else{ return that.pause.time-that.startTime-that.pause.sum; } }; that.reset=function(){ //复位 that.run=false; that.runTime=0; that.startTime=0; that.pause.sum=0; that.pause.num=0; that.pause.time=0; return that; }; that.show=function(){ //若开始循环则监听返回true if(that.run==true){ setTimeout(function(){ if(that.run==true){ that.onShow(that.get()); that.show(); } },that.showtime); return true; }else{ that.onShow(that.get()); // return false; } } return that; }; |
可以new Stopwatch或Stopwacth()均可初始化对象。假设初始化对象为sw
对象初始化后需要计时时执行sw.start()开始计时
需要暂停时执行sw.stop()stop会停止计时,需要开始时再次执行sw.start()
如果需要返回当前总共计时时间,执行sw.get(),返回毫秒值。
如果打算在每隔一定时间执行一次特定工作,可以使用sw.show(),使用前需要设置sw.onShow回调函数,和sw.showtime间隔时间。注意的是show()方法仅仅在start后才可反复执行,当执行stop()方法时会自行退出
注意,sw.stop后sw.show之多sw.showtime毫秒后退出,showtime在show后改变不影响show行为,必须要停止后才能更新,回调函数同理。
可以多次show。
todo:回调函数类型检查。
注意问题的优化
您必须登录才能发表评论。