如何知道计时器是否被清除或在javascript中超时?

前端之家收集整理的这篇文章主要介绍了如何知道计时器是否被清除或在javascript中超时?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
好的,非常简单的问题.我正在 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.");
}

如果需要,您可以扩展相同的基本思想以包含其他功能(例如,重复计时器,开始/停止/恢复等)

原文链接:https://www.f2er.com/js/158472.html

猜你在找的JavaScript相关文章