J'ai setInterval
un morceau de code en cours d'exécution 30 fois par seconde. Cela fonctionne très bien, cependant lorsque je sélectionne un autre onglet (afin que l'onglet avec mon code devienne inactif), le setInterval
est mis à un état inactif pour une raison quelconque.
J'ai fait ce cas de test simplifié ( http://jsfiddle.net/7f6DX/3/ ):
var $div = $('div');
var a = 0;
setInterval(function() {
a++;
$div.css("left", a)
}, 1000 / 30);
Si vous exécutez ce code, puis passez à un autre onglet, attendez quelques secondes et revenez en arrière, l'animation continue au point où elle se trouvait lorsque vous êtes passé à l'autre onglet. Ainsi, l'animation ne s'exécute pas 30 fois par seconde au cas où l'onglet serait inactif. Cela peut être confirmé en comptant le nombre de fois où la setInterval
fonction est appelée chaque seconde - ce ne sera pas 30 mais juste 1 ou 2 si l'onglet est inactif.
Je suppose que cela est fait par conception afin d'améliorer les performances, mais existe-t-il un moyen de désactiver ce comportement? C'est en fait un inconvénient dans mon scénario.
Date
. Ainsi, lorsque les intervalles ne se déclenchent pas rapidement (pour cela ou pour d'autres raisons), l'animation devient plus saccadée, pas plus lente.
Date
objet pour vraiment voir le temps écoulé.