0Pricing
HTML Academy · Leçon

Configurer des animations liées au défilement

Déclenchez des animations CSS lorsque les éléments entrent dans la fenêtre d’affichage.

Configurer des animations liées au défilement 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.

L’objectif

Les animations liées au défilement se jouent, se mettent en pause ou s’inversent selon la visibilité de l’élément. Exemples : l’apparition progressive d’une bannière lorsque vous faites défiler une section jusqu’à la rendre visible, un nombre qui augmente lorsqu’il devient visible, ou un effet de parallaxe lié à la position de défilement. IntersectionObserver déclenche les animations ; CSS ou l’API Web Animations les exécute.

Animations déclenchées par un événement

Le modèle le plus simple consiste à ajouter, lorsqu’un élément entre dans la fenêtre d’affichage, une classe CSS qui contient l’animation. Dans la fonction de rappel de l’observer, utilisez entry.target.classList.add("in-view") ; la classe définit animation: fade-in 600ms forwards.

.fade-up { opacity: 0; transform: translateY(20px); }
.fade-up.in-view {
  animation: fadeUp 600ms cubic-bezier(.2,.8,.2,1) forwards;
}
@keyframes fadeUp {
  to { opacity: 1; transform: none; }
}

Configuration de l’observer

Créez un observer partagé, appelez observe pour chaque élément possédant la classe de déclenchement, ajoutez « in-view » lors de l’intersection, puis appelez unobserve pour éviter de relancer l’animation. Pour les animations exécutées une seule fois, cela suffit ; pour les animations qui se répètent lors d’une nouvelle entrée dans la fenêtre d’affichage, n’appelez pas unobserve et retirez la classe à la sortie.

const observer = new IntersectionObserver((entries) => {
  for (const entry of entries) {
    if (entry.isIntersecting) {
      entry.target.classList.add("in-view");
      observer.unobserve(entry.target);
    }
  }
}, { threshold: 0.2 });
document.querySelectorAll(".fade-up").forEach((el) => observer.observe(el));

Effets décalés

Pour révéler séquentiellement les éléments d’une liste, appliquez à chacun un délai différent à l’aide d’une propriété personnalisée CSS : style="--delay: ${i * 100}ms" ; l’animation lit animation-delay: var(--delay). Les éléments s’animent en cascade lorsque la liste entre dans la fenêtre d’affichage.

Seuil pour un déclenchement plus précoce

threshold: 0.2 se déclenche lorsque 20 % de l’élément est visible : c’est généralement un bon moment pour les animations « in-view ». threshold: 0 se déclenche trop tôt, dès qu’un pixel est visible, et le résultat paraît brusque ; threshold: 1 se déclenche trop tard, lorsque l’élément est entièrement visible, et donne une impression de retard.

Animations liées au défilement ou déclenchées par celui-ci

Les animations déclenchées par le défilement se jouent une fois lors de l’intersection, comme expliqué précédemment. Les animations liées au défilement font progresser leur animation au même rythme que la position de défilement. La méthode moderne repose sur les animations CSS pilotées par le défilement (animation-timeline: scroll()), tandis qu’IntersectionObserver reste utile pour détecter l’entrée dans des zones de déclenchement et la sortie de celles-ci.

Éviter les recalculs incessants de mise en page

Animez les propriétés que le GPU peut transformer efficacement : transform et opacity. Évitez d’animer top, left, width et height : ces propriétés déclenchent une mise en page à chaque image, ce qui fait saccader les animations liées au défilement sur les appareils de gamme intermédiaire.

Respecter la réduction des animations

Placez les déclarations d’animation dans @media (prefers-reduced-motion: no-preference) afin que les personnes qui demandent une réduction des animations, notamment en raison de troubles vestibulaires ou d’une sensibilité particulière, obtiennent l’état final statique sans mouvement. Les animations décoratives doivent être entièrement désactivées lorsque la réduction des animations est activée.

.fade-up { opacity: 1; transform: none; }
@media (prefers-reduced-motion: no-preference) {
  .fade-up { opacity: 0; transform: translateY(20px); }
  .fade-up.in-view { animation: fadeUp 600ms forwards; }
}

Modèle de performance

Utilisez un seul observer partagé, et non un observer par élément. Appelez unobserve lorsqu’une animation exécutée une seule fois s’est déclenchée. Utilisez will-change avec parcimonie : uniquement sur les éléments qui s’animent actuellement, puis retirez-le lorsque l’animation se termine. Surveillez le panneau des performances pour repérer les images perdues.

Animations bidirectionnelles

Pour les animations qui doivent s’inverser lorsque l’élément quitte la fenêtre d’affichage, n’appelez pas unobserve. Dans la fonction de rappel, utilisez toggle pour activer ou désactiver la classe selon isIntersecting : entry.target.classList.toggle("in-view", entry.isIntersecting). L’animation avance lors de l’entrée et s’inverse lors de la sortie.

Combinaison avec l’API Web Animations

Pour les animations pilotées par JS, remplacez classList.add par entry.target.animate(keyframes, options). WAAPI renvoie un objet Animation que vous pouvez mettre en pause, inverser ou enchaîner à l’aide de promesses : cette solution est plus flexible que CSS pour les séquences complexes.

Vérification des connaissances

Pourquoi est-il préférable d’animer transform et opacity plutôt que top, left, width et height dans les animations liées au défilement ?

Résumé

Les animations liées au défilement combinent IntersectionObserver avec des classes d’animation CSS ou WAAPI. Définissez un état masqué, ajoutez « in-view » lors de l’intersection, animez transform et opacity, plutôt que top et left, respectez prefers-reduced-motion, puis créez des décalages à l’aide de propriétés personnalisées CSS pour obtenir des apparitions en cascade. Pour les animations qui suivent entièrement la progression du défilement, envisagez les animations natives pilotées par le défilement (animation-timeline: scroll()).

Questions Fréquemment Posées

La leçon « Configurer des animations liées au défilement » est-elle gratuite ?

Oui — le texte complet de « Configurer des animations liées au défilement » 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 « Configurer des animations liées au défilement » ?

Déclenchez des animations CSS lorsque les éléments entrent dans la fenêtre d’affichage. 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 « Configurer des animations liées au défilement » ?

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. API `IntersectionObserver` et seuils
  2. Chargement différé avec `IntersectionObserver`
  3. Implémenter le défilement infini
  4. Configurer des animations liées au défilement
← Retour à HTML Academy