window.requestAnimationFrame()
window.requestAnimationFrame()
indica al browser che intendi eseguire un'animazione e desideri che il browser richiami una funzione specifica per aggiornare un'animazione prima che venga eseguito nuovamente il render del browser. Il metodo accetta una funzione di callback come argomento che verrà eseguita prima del nuovo render del browser.requestAnimationFrame()
se vuoi animare un'altro frame alla successiva azione di render del browser.Dovresti chiamare questo metodo ogni qualvolta intendi aggiornare lo stato della tua animazione sul monitor. In questo modo la tua richiesta verrà eseguita prima che il browser esegua nuvamente il render della pagina. Il numero di esecuzioni della callback è generalmente di 60 volte al secondo, ma di solito rispetta il refresh-rate del display per quasi tutti i browser secondo le raccomandazioni W3C.
L'esecuzione di requestAnimationFrame() vengono messe in pausa in quasi tutti i browser quando la pagina è eseguita in un tab non visibile on in un <iframe>
non visibile in modo da migliorare le performance e l'utilizzo della batteria.
Alla funzione di callback viene passato come singolo argomento il parametro DOMHighResTimeStamp
(en-US) che indica i momento corrente in cui viene eseguito dalla coda di requestAnimationFrame()
Nel caso di callback multiple in un singolo frame, ogni funzione riceve lo stesso timestamp anche se è trascorso del tempo durante il calcolo di ogni processo.
Il timestamp è un numero decimale, in millisecondi, con una precisione di 1ms (1000µs).
Sintassi
window.requestAnimationFrame(callback);
Parametri
callback
- Il parametro che specifica la funzione di callback da richiamare prima che venga eseguito il render successivo della pagina.
La funzione accetta un solo parametro,DOMHighResTimeStamp
(en-US), che indica il momento esatto (nel formatoperformance.now()
) in cuirequestAnimationFrame()
inizia la sua esecuzione.
Valori di ritorno
Un valore intero di tipo long
, l'id della richiesta che identifica univocamente la callback specifica nella lista di callback. Questo è un valore assoluto, ma non dovresti fare nessun tipo di ragionamento sulla base di questo valore. Puoi, però, usare questo valore per passarlo a window.cancelAnimationFrame()
(en-US) in modo da rimuovere/cancellare la callback dalla coda di richieste da eseguire.
Esempio
var start = null;
var element = document.getElementById('SomeElementYouWantToAnimate');
element.style.position = 'absolute';
function step(timestamp) {
if (!start) start = timestamp;
var progress = timestamp - start;
element.style.left = Math.min(progress / 10, 200) + 'px';
if (progress < 2000) {
window.requestAnimationFrame(step);
}
}
window.requestAnimationFrame(step);
Specifiche
Specifica | Stato | Commento |
---|---|---|
HTML Living Standard The definition of 'requestAnimationFrame' in that specification. |
Living Standard |
Nessun cambiamento. Sostituisce il precedente. |
Timing control for script-based animations The definition of 'requestAnimationFrame' in that specification. |
Obsolete |
Definizione iniziale |
Compatibilità del Browser
BCD tables only load in the browser
Leggi anche
Window.mozAnimationStartTime
(en-US)Window.cancelAnimationFrame()
(en-US)- mozRequestAnimationFrame - Blog post
- requestAnimationFrame for smart animating - Blog post
- Animating with javascript: from setInterval to requestAnimationFrame - Blog post
- Using PC Hardware more efficiently in HTML5: New Web Performance APIs, Part 1 - Blog post
- TestUFO: Test your web browser for requestAnimationFrame() Timing Deviations
- Paul Irish: requestAnimationFrame API: now with sub-millisecond precision