Ich habe setInterval30 Mal pro Sekunde einen Code ausgeführt. Dies funktioniert jedoch hervorragend. Wenn ich jedoch eine andere Registerkarte auswähle (sodass die Registerkarte mit meinem Code inaktiv wird), setIntervalwird die Registerkarte aus irgendeinem Grund in den Ruhezustand versetzt.
Ich habe diesen vereinfachten Testfall erstellt ( http://jsfiddle.net/7f6DX/3/ ):
var $div = $('div');
var a = 0;
setInterval(function() {
a++;
$div.css("left", a)
}, 1000 / 30);
Wenn Sie diesen Code ausführen und dann zu einer anderen Registerkarte wechseln, einige Sekunden warten und zurückgehen, wird die Animation an dem Punkt fortgesetzt, an dem Sie zur anderen Registerkarte gewechselt haben. Die Animation wird also nicht 30 Mal pro Sekunde ausgeführt, falls die Registerkarte inaktiv ist. Dies kann bestätigt werden, indem gezählt wird, wie oft die setIntervalFunktion pro Sekunde aufgerufen wird. Dies ist nicht 30, sondern nur 1 oder 2, wenn die Registerkarte inaktiv ist.
Ich denke, dass dies beabsichtigt ist, um die Leistung zu verbessern, aber gibt es eine Möglichkeit, dieses Verhalten zu deaktivieren? In meinem Szenario ist das eigentlich ein Nachteil.
Date. Wenn die Intervalle (aus diesem oder anderen Gründen) nicht schnell ausgelöst werden, wird die Animation nur ruckeliger und nicht langsamer.
DateObjekt gehackt, um wirklich zu sehen, welche Zeit vergangen ist.