Mam setInterval
działający fragment kodu 30 razy na sekundę. Działa to świetnie, jednak gdy wybiorę inną kartę (aby karta z moim kodem stała się nieaktywna),setInterval
jakiegoś powodu ustawia się ją w stan bezczynności.
Zrobiłem ten uproszczony przypadek testowy ( http://jsfiddle.net/7f6DX/3/ ):
var $div = $('div');
var a = 0;
setInterval(function() {
a++;
$div.css("left", a)
}, 1000 / 30);
Jeśli uruchomisz ten kod, a następnie przełączysz się na inną kartę, poczekaj kilka sekund i wróć, animacja będzie kontynuowana w momencie, w którym przełączyłeś się na inną kartę. Tak więc animacja nie jest uruchamiana 30 razy na sekundę w przypadku, gdy karta jest nieaktywna. Można to potwierdzić, licząc liczbę razysetInterval
funkcji w każdej sekundzie - nie będzie to 30, ale tylko 1 lub 2, jeśli karta jest nieaktywna.
Wydaje mi się, że odbywa się to zgodnie z projektem, aby poprawić wydajność, ale czy jest jakiś sposób na wyłączenie tego zachowania? W moim scenariuszu jest to faktycznie wada.
Date
. Tak więc, gdy interwały nie uruchamiają się szybko (z tego lub innych powodów) animacja staje się bardziej gwałtowna, a nie wolniejsza.
Date
obiektem, aby naprawdę zobaczyć, co minęło.