Ho setInterval
un pezzo di codice in esecuzione 30 volte al secondo. Funziona benissimo, tuttavia quando seleziono un'altra scheda (in modo che la scheda con il mio codice diventi inattiva), setInterval
per qualche motivo è impostata su uno stato inattivo.
Ho realizzato questo caso di test semplificato ( http://jsfiddle.net/7f6DX/3/ ):
var $div = $('div');
var a = 0;
setInterval(function() {
a++;
$div.css("left", a)
}, 1000 / 30);
Se esegui questo codice e poi passi a un'altra scheda, attendi qualche secondo e torni indietro, l'animazione continua nel punto in cui era quando sei passato all'altra scheda. Quindi l'animazione non viene eseguita 30 volte al secondo nel caso in cui la scheda sia inattiva. Ciò può essere confermato contando il numero di volte in cui la setInterval
funzione viene chiamata ogni secondo - questo non sarà 30 ma solo 1 o 2 se la scheda è inattiva.
Immagino che ciò avvenga in base alla progettazione in modo da migliorare le prestazioni, ma esiste un modo per disabilitare questo comportamento? In realtà è uno svantaggio nel mio scenario.
Date
. In modo che quando gli intervalli non si attivano rapidamente (per questo o altri motivi) l'animazione diventa solo più nervosa, non più lenta.
Date
all'oggetto per vedere davvero a che ora è passato.