我有一個包含setTimeout()方法的函數。檢查活動計時器(setTimeout)
我有一個調用該函數的按鈕,因此您可以多次點擊此按鈕並根據需要多次調用此函數。
只有在沒有其他具有活動計時器的函數的實例時,纔有實際執行此函數的方法嗎?
我有一個包含setTimeout()方法的函數。檢查活動計時器(setTimeout)
我有一個調用該函數的按鈕,因此您可以多次點擊此按鈕並根據需要多次調用此函數。
只有在沒有其他具有活動計時器的函數的實例時,纔有實際執行此函數的方法嗎?
您將不得不跟蹤以前是否設置了此計時器,以及是否通過使用某種變量來保持多個按鈕按下的範圍。
沒有內置函數可以告訴您使用此按鈕啓動的計時器是否仍在運行。你必須創建你自己的。它可以這樣工作:
var buttonTimer;
function myButtonClick() {
if (!buttonTimer) {
buttonTimer = setTimeout(function() {
buttonTimer = null;
// put your timer code here
}, 2000);
}
}
只要有一個當前活動的計時器,這將忽略按鈕點擊。當沒有定時器運行時,它將設置一個新的定時器。
由於您要跟蹤實際的計時器ID,您還可以自由執行其他行爲,例如取消以前的計時器(例如停止按鈕),或通過取消計時器將計時器重置爲新的時間間隔先前的定時器,然後設置一個新的。
試試這個:
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>
向我們展示的代碼,你顯然有一些事件處理程序和已超時。 – adeneo