检查活动计时器(setTimeout)

时间:2014-01-19 20:39:04

标签: javascript

我有一个包含setTimeout()方法的函数。

我有一个调用该功能的按钮,因此您可以多次点击此按钮并根据需要多次调用此功能。

有没有办法实际执行此功能,只有在没有其他具有活动计时器功能的实例的情况下?

2 个答案:

答案 0 :(得分:2)

你必须跟踪你之前是否已经设置了这个计时器,以及它是否仍然是活动的,使用某种变量,其范围在多个按钮按下时保持不变。

没有内置功能可以告诉您使用此按钮启动的计时器是否仍在运行。你必须创建自己的。它可以像这样工作:

var buttonTimer;
function myButtonClick() {
    if (!buttonTimer) {
        buttonTimer = setTimeout(function() {
            buttonTimer = null;
            // put your timer code here
        }, 2000);
    }
}

只要有当前活动的计时器,这将忽略按钮单击。当没有计时器运行时,它将设置一个新的计时器。

因为您正在跟踪实际的计时器ID,所以您也可以自由地实现其他行为,例如取消之前的计时器(例如停止按钮)或通过取消之前的计时器将计时器重置为新的时间间隔计时器,然后设置一个新的。

答案 1 :(得分:0)

试试这个:

var Timer = function() {
    var self = this;
    this.running = false;
    this.run = function() {
        if(!self.running) {
            self.running = true;
            console.log('starting run');
            setTimeout(function() {
                self.running = false;
                console.log('done running!');
            }, 5000);
        } else {
         console.log('i was running already!');   
        }
    }
    return this;
}
var aTimer = new Timer();

并添加一个按钮用于测试目的:

<button onclick="aTimer.run()">Run!</button>

小提琴:http://jsfiddle.net/kukiwon/FCuNh/