Animazioni con requestAnimationFrame
Creare animazioni fluide su canvas con il ciclo dei fotogrammi
Animazioni con requestAnimationFrame è una lezione HTML Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento HTML Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso HTML Academy include 4 lezioni in totale.
Perché utilizzare requestAnimationFrame?
requestAnimationFrame (rAF) pianifica una callback prima del successivo ridisegno del browser, sincronizzando l'animazione con la frequenza di aggiornamento dello schermo (in genere 60 fps). A differenza di setInterval, rAF si mette in pausa quando la scheda è nascosta, risparmiando CPU e batteria.
Ciclo di animazione di base
Un ciclo rAF: definisca una funzione animate che disegna il fotogramma corrente, quindi chiami requestAnimationFrame(animate) per pianificare il successivo. Il browser chiama animate prima di ogni ridisegno, creando un'animazione continua alla frequenza dei fotogrammi dello schermo.
function animate(timestamp) {
ctx.clearRect(0, 0, canvas.width, canvas.height);
// draw frame at current state
draw(timestamp);
requestAnimationFrame(animate);
}
requestAnimationFrame(animate);Il parametro timestamp
rAF passa un DOMHighResTimeStamp (millisecondi dall'avvio del caricamento della pagina) alla callback. Lo utilizzi per calcolare un movimento indipendente dalla frequenza dei fotogrammi: delta = timestamp - lastTimestamp. Moltiplichi la velocità per delta per spostare la stessa distanza al secondo, indipendentemente dalla frequenza dei fotogrammi.
Movimento indipendente dalla frequenza dei fotogrammi
Calcoli il tempo trascorso dall'ultimo fotogramma e ridimensioni di conseguenza lo spostamento. Un oggetto che si muove a 100px/s percorre 100 * (delta / 1000) pixel per fotogramma. In questo modo la fisica rimane coerente su schermi a 30 fps e a 144 fps.
Arrestare un'animazione
rAF restituisce un handle. Lo annulli con cancelAnimationFrame(handle). Memorizzi l'handle in una variabile, controlli un flag running all'interno del ciclo oppure annulli l'animazione durante la pulizia del componente. Annulli sempre i cicli quando l'elemento viene rimosso dal DOM.
Schema di animazione su Canvas
A ogni fotogramma: (1) applichi clearRect all'intero canvas, (2) aggiorni le variabili di stato (posizione, angolo, tempo), (3) disegni tutti gli oggetti nelle nuove posizioni, (4) chiami requestAnimationFrame per il fotogramma successivo. Non salti mai clearRect: i fotogrammi precedenti si accumulerebbero creando una scia.
Transizioni CSS vs rAF
Utilizzi transizioni e animazioni CSS per animazioni semplici basate sulle proprietà (effetti al passaggio del mouse, ingresso laterale di una finestra modale). Utilizzi rAF per animazioni complesse e interattive — cicli di gioco, simulazioni fisiche, rendering su canvas — quando è necessario un controllo dettagliato su ogni fotogramma.
Doppio buffering su Canvas
Per scene complesse, disegni prima su un canvas fuori schermo, quindi utilizzi drawImage per disegnarlo sul canvas visibile con una sola operazione. In questo modo evita lo sfarfallio, perché non mostra mai un fotogramma disegnato solo parzialmente: il canvas visibile si aggiorna atomicamente a ogni fotogramma.
Limitare la frequenza dei fotogrammi
Limiti la frequenza a un valore inferiore (ad esempio 30 fps): verifichi che sia trascorso tempo sufficiente dall'ultimo disegno prima di eseguire il rendering. if (timestamp - lastDraw >= 1000/30) { draw(); lastDraw = timestamp; }. Pianifichi comunque rAF per mantenere la reattività.
Debug del ciclo di animazione
Il pannello Performance di Chrome DevTools registra le callback rAF nel flame chart JavaScript. Cerchi callback lunghe oltre 16 ms: causano la perdita di fotogrammi. Utilizzi il misuratore FPS (Rendering → FPS Meter) per osservare la frequenza dei fotogrammi in tempo reale durante l'interazione.
Alternativa: Web Animations API
Per animazioni dichiarative più semplici senza gestire manualmente i tempi: element.animate(keyframes, options). WAAPI gestisce funzioni temporali, modalità di riempimento e iterazioni, delegando al browser il calcolo dei fotogrammi. Utilizzi rAF per la logica di rendering personalizzata che WAAPI non è in grado di esprimere.
Verifica delle conoscenze
Perché la velocità dell'animazione dovrebbe essere moltiplicata per il delta temporale in un ciclo requestAnimationFrame?
Riepilogo
requestAnimationFrame sincronizza le animazioni JavaScript con la frequenza di aggiornamento dello schermo e si mette in pausa nelle schede nascoste. Il parametro timestamp consente un movimento indipendente dalla frequenza dei fotogrammi tramite il ridimensionamento basato sul delta temporale. Lo schema del ciclo di animazione su canvas (cancellare, aggiornare, disegnare, pianificare), combinato con cancelAnimationFrame per la pulizia, costituisce la base per animazioni web fluide ed efficienti.
Domande Frequenti
La lezione «Animazioni con requestAnimationFrame» è gratuita?
Sì — il testo completo di «Animazioni con requestAnimationFrame» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso HTML Academy, passa a CoddyKit PRO. Il corso HTML Academy include 4 lezioni in totale.
Cosa imparerò in «Animazioni con requestAnimationFrame»?
Creare animazioni fluide su canvas con il ciclo dei fotogrammi Eserciti HTML Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare HTML Academy?
Non è richiesta alcuna esperienza precedente. HTML Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «Animazioni con requestAnimationFrame»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione HTML Academy?
Sì. Ogni lezione HTML Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Configurare canvas e il contesto 2D
- Disegnare rettangoli e tracciati
- Testo e immagini su canvas
- Animazioni con requestAnimationFrame