Anstatt nur eine Anzahl von Timern zu haben, ist hier eine Implementierung, die alle Timerids in einem Array speichert. Es werden nur aktive Timer angezeigt, während die akzeptierte Antwort nur Anrufe an setTimeout
& zählt clearTimeout
.
(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));
So können Sie die Anzahl der aktiven Timer auf der Seite ermitteln:
timers.length;
So können Sie alle aktiven Timer entfernen :
for(var i = timers.length; i--;)
clearInterval(timers[i]);
Bekannte Einschränkungen:
setTimeout
Mit diesem Affen-Patch können Sie nur eine Funktion (keine Zeichenfolge) übergeben .
- Die Funktion übernimmt
clearInterval
und clearTimeout
tut dasselbe, was sie tut, aber es könnte sich in Zukunft ändern.
activeTimers
dekrementieren, wennclearTimeout
es nicht aufgerufen wurde.window.setTimeout
Dies kann leicht erreicht werden, indem die zweite Zeile durch folgende ersetzt wird :return window.originalSetTimeout(function() {func(); activeTimers--;},delay);