Eu tenho um setInterval
código de execução 30 vezes por segundo. Isso funciona muito bem, no entanto, quando seleciono outra guia (para que a guia com o meu código fique inativa), ela setInterval
é configurada para um estado inativo por algum motivo.
Fiz este caso de teste simplificado ( http://jsfiddle.net/7f6DX/3/ ):
var $div = $('div');
var a = 0;
setInterval(function() {
a++;
$div.css("left", a)
}, 1000 / 30);
Se você executar esse código e alternar para outra guia, aguarde alguns segundos e volte, a animação continuará no ponto em que você mudou para a outra guia. Portanto, a animação não está sendo executada 30 vezes por segundo, caso a guia esteja inativa. Isso pode ser confirmado contando a quantidade de vezes que a setInterval
função é chamada a cada segundo - isso não será 30, mas apenas 1 ou 2 se a guia estiver inativa.
Eu acho que isso é feito por design, a fim de melhorar o desempenho, mas existe alguma maneira de desativar esse comportamento? Na verdade, é uma desvantagem no meu cenário.
Date
. Assim, quando os intervalos não disparam rapidamente (por esse ou outros motivos), a animação fica mais instável, não mais lenta.
Date
objeto para realmente ver que horas passaram.