0Pricing
HTML Academy · Leçon

Animation avec `requestAnimationFrame`

Créez des animations fluides sur canevas avec la boucle d’images d’animation.

Animation avec `requestAnimationFrame` est une leçon HTML Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage HTML Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours HTML Academy comprend 4 leçons au total.

Pourquoi utiliser requestAnimationFrame ?

requestAnimationFrame (rAF) planifie une fonction de rappel avant le prochain rafraîchissement du navigateur et synchronise l’animation avec la fréquence de rafraîchissement de l’écran (généralement 60 FPS). Contrairement à setInterval, rAF se met en pause lorsque l’onglet est masqué, ce qui économise le CPU et la batterie.

Boucle d’animation de base

Une boucle rAF consiste à définir une fonction animate qui dessine l’image actuelle, puis appelle requestAnimationFrame(animate) pour planifier la suivante. Le navigateur appelle animate avant chaque rafraîchissement, créant une animation continue à la fréquence d’images de l’écran.

function animate(timestamp) {
  ctx.clearRect(0, 0, canvas.width, canvas.height);
  // draw frame at current state
  draw(timestamp);
  requestAnimationFrame(animate);
}
requestAnimationFrame(animate);

Le paramètre d’horodatage

rAF transmet à la fonction de rappel un horodatage haute résolution du DOM (en millisecondes depuis le chargement de la page). Utilisez-le pour calculer un mouvement indépendant de la fréquence d’images : delta = timestamp - lastTimestamp. Multipliez la vitesse par delta pour parcourir la même distance par seconde, quelle que soit la fréquence d’images.

Mouvement indépendant de la fréquence d’images

Calculez le temps écoulé depuis la dernière image et adaptez le déplacement en conséquence. Un objet se déplaçant à 100 px/s parcourt 100 * (delta / 1000) pixels par image. Cela garantit une physique cohérente sur des écrans à 30 FPS comme à 144 FPS.

Arrêter une animation

rAF renvoie un identifiant. Annulez-le avec cancelAnimationFrame(handle). Stockez l’identifiant dans une variable, vérifiez un indicateur d’exécution dans la boucle ou annulez-le lors du nettoyage du composant. Annulez toujours les boucles lorsque l’élément est supprimé du DOM.

Modèle d’animation sur canevas

À chaque image : (1) effacez tout le canevas avec clearRect, (2) mettez à jour les variables d’état (position, angle, temps), (3) dessinez tous les objets à leurs nouvelles positions, (4) appelez requestAnimationFrame pour l’image suivante. N’omettez jamais clearRect : les anciennes images s’accumulent et forment une traînée.

Transitions CSS ou rAF

Utilisez les transitions et animations CSS pour les animations simples fondées sur des propriétés (effets au survol, apparition d’une fenêtre modale). Utilisez rAF pour les animations complexes et interactives — boucles de jeu, simulations physiques, rendu sur canevas — lorsque vous avez besoin d’un contrôle précis sur chaque image.

Double mise en mémoire tampon sur canevas

Pour les scènes complexes, dessinez d’abord sur un canevas hors écran, puis utilisez drawImage pour le dessiner sur le canevas visible en une seule opération. Cela évite les scintillements, car une image partiellement dessinée n’est jamais affichée : le canevas visible est mis à jour de manière atomique à chaque image.

Limiter à une fréquence d’images cible

Limitez la fréquence à une valeur inférieure (par exemple, 30 FPS) : vérifiez si suffisamment de temps s’est écoulé depuis le dernier dessin avant d’effectuer le rendu. if (timestamp - lastDraw >= 1000/30) { draw(); lastDraw = timestamp; }. Planifiez tout de même rAF pour conserver la réactivité.

Déboguer une animation

Le panneau Performances de Chrome DevTools enregistre les fonctions de rappel rAF dans le graphique en flammes JS. Recherchez les fonctions de rappel longues qui dépassent 16 ms : elles provoquent des pertes d’images. Utilisez le compteur FPS (Rendu → Compteur FPS) pour observer la fréquence d’images en temps réel pendant l’interaction.

Alternative avec l’API Web Animations

Pour des animations déclaratives plus simples, sans gestion manuelle du temps : element.animate(keyframes, options). WAAPI gère les fonctions temporelles, les modes de remplissage et les itérations, déléguant au navigateur le calcul des images. Utilisez rAF pour la logique de rendu personnalisée que WAAPI ne peut pas exprimer.

Vérification des connaissances

Pourquoi faut-il multiplier la vitesse d’animation par le temps delta dans une boucle requestAnimationFrame ?

Résumé

requestAnimationFrame synchronise les animations JavaScript avec la fréquence de rafraîchissement de l’écran et se met en pause dans les onglets masqués. Le paramètre d’horodatage permet un mouvement indépendant de la fréquence d’images grâce à l’adaptation au temps delta. Le modèle de boucle d’animation sur canevas (effacer, mettre à jour, dessiner, planifier), associé à cancelAnimationFrame pour le nettoyage, constitue la base d’animations web fluides et efficaces.

Questions Fréquemment Posées

La leçon « Animation avec `requestAnimationFrame` » est-elle gratuite ?

Oui — le texte complet de « Animation avec `requestAnimationFrame` » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours HTML Academy, passe à CoddyKit PRO. Le cours HTML Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Animation avec `requestAnimationFrame` » ?

Créez des animations fluides sur canevas avec la boucle d’images d’animation. Tu pratiques HTML Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer HTML Academy ?

Aucune expérience préalable n'est requise. HTML Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.

Combien de temps prend la leçon « Animation avec `requestAnimationFrame` » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon HTML Academy ?

Oui. Chaque leçon HTML Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Configurer `canvas` et le contexte 2D
  2. Dessiner des rectangles et des tracés
  3. Texte et images sur `canvas`
  4. Animation avec `requestAnimationFrame`
← Retour à HTML Academy