好的,非常简单的问题.我正在
javascript参加速成课程.
如果我使用
timer = setTimeout(…,500)设置一个定时器,然后clearTimeout(定时器)清除定时器,定时器的整数值不变,所以我的问题是如何知道定时器是否超时或清除?
我想使用if(timer){…},但显然正整数总是返回true.
解决方法
如果您正在寻找更正式的东西,您可以构建封装setTimeout / clearTimeout功能的javascript类.
这样的类可能看起来像这样:
/** class Timer **/ var Timer = function(delayMs,callbackFunc) { this.delayMs = delayMs; this.callbackFunc = callbackFunc; this.timerState = 'new'; } Timer.prototype.start = function() { if( this.tmr ) return; var self = this; this.timerState = 'running'; this.tmr = setTimeout(function() { self._handleTmr(); },this.delayMs); } Timer.prototype.cancel = function() { if( ! this.tmr ) return; clearTimeout(this.tmr); this.tmr = null; this.timerState = 'canceled'; } Timer.prototype._handleTmr = function() { this.tmr = null; this.timerState = 'completed'; this.callbackFunc(); }
我还添加了一个timerState属性,可以让您轻松确定计时器是“已完成”还是“已取消”.
你会像这样使用它:
var t = new Timer(500,function() { alert('timer completed'); }); t.start(); // do whatever... // now cancel the timer if it hasn't completed yet. t.cancel(); // maybe you do some other stuff... // then check the timerState,and act accordingly. // if( t.timerState == 'canceled' ) { alert("the timer was canceled!"); } else { alert("the timer completed uneventfully."); }
如果需要,您可以扩展相同的基本思想以包含其他功能(例如,重复计时器,开始/停止/恢复等)