, burada bir diziye bütün timerId 's saklayan bir uygulamasıdır. Sadece kabul edilen yanıtı
setTimeout
& 'a sayarken sadece
etkin zamanlayıcıları gösterir.
for(var i = timers.length; i--;)
clearInterval(timers[i]);
:
timers.length;
Bu tüm aktif zamanlayıcılar kaldırmak için aşağıdaki adımları:
(function(w) {
var oldST = w.setTimeout;
var oldSI = w.setInterval;
var oldCI = w.clearInterval;
var timers = [];
w.timers = timers;
w.setTimeout = function(fn, delay) {
var id = oldST(function() {
fn && fn();
removeTimer(id);
}, delay);
timers.push(id);
return id;
};
w.setInterval = function(fn, delay) {
var id = oldSI(fn, delay);
timers.push(id);
return id;
};
w.clearInterval = function(id) {
oldCI(id);
removeTimer(id);
};
w.clearTimeout = w.clearInterval;
function removeTimer(id) {
var index = timers.indexOf(id);
if (index >= 0)
timers.splice(index, 1);
}
}(window));
Bu
sayfadaki aktif zamanlayıcılar ait
sayısı elde edebilir nasıl Bilinen sınırlamalar:
- Bu maymun yamasıyla yalnızca bir işlevi (bir dizgi değil)
setTimeout
'a geçirebilirsiniz.
- İşlev,
clearInterval
ve clearTimeout
öğelerinin aynı olduğunu varsayar, aynı şekilde yapar, ancak gelecekte değişebilir.
Satır 2'de yazım hatası olduğunu unutmayın. window.cleartTimeout window.clearTimeout olmalıdır. SO, en az 6 karakter değiştirmeden düzenlememe izin vermez. – checker
iyi görüldü, kimse fark etmeden 3 yıl geçti! –
Bunu bugün bazı kodlarda kullandım, ancak 'clearTimeout'un * çağrılmadığı zaman' activeTimers 'değerine ihtiyacım vardı. Window.setTimeout'un ikinci satırının bununla değiştirilmesiyle kolayca yapılabilir: 'return window.originalSetTimeout (function() {func(); activeTimers -;}, gecikme);' –