Chargement...

Animations

Les animations dans Angular jouent un rôle fondamental dans la création d’expériences utilisateurs fluides, dynamiques et modernes. Elles permettent d’exprimer visuellement les changements d’état d’un composant, de guider l’utilisateur dans sa navigation et d’apporter une cohérence visuelle dans une application monopage (SPA). Angular propose un module d’animations puissant basé sur l’API Web Animations, qui permet de définir des transitions, des effets et des mouvements de manière déclarative en TypeScript.
Les animations Angular s’intègrent profondément dans la logique des composants, le cycle de vie et la gestion d’état. Chaque animation peut réagir à un changement de propriété, à une transition de route ou à une interaction utilisateur. Grâce à cette approche déclarative, il devient possible de synchroniser parfaitement la logique métier et la présentation sans avoir recours à des manipulations DOM manuelles.
Dans ce tutoriel, vous apprendrez à utiliser le module @angular/animations, à définir des déclencheurs (trigger), des états (state), des transitions (transition) et des styles (style). Vous comprendrez également comment relier les animations aux flux de données, gérer leurs performances et optimiser leur exécution dans le cycle de vie des composants Angular. En fin de lecture, vous serez en mesure de concevoir des interfaces professionnelles, performantes et hautement interactives.

Exemple de Base

typescript
TYPESCRIPT Code
import { Component } from '@angular/core';
import { trigger, state, style, transition, animate } from '@angular/animations';

@Component({
selector: 'app-boite-toggle',
template: `       <div [@ouvrirFermer]="ouvert ? 'ouvert' : 'fermé'" class="boite"></div>       <button (click)="toggle()">Basculer</button>
`,
styles: [`
.boite {
width: 200px;
height: 200px;
margin-top: 20px;
background-color: lightcoral;
}
button {
margin-top: 10px;
}
`],
animations: [
trigger('ouvrirFermer', [
state('ouvert', style({ height: '200px', opacity: 1, backgroundColor: 'lightcoral' })),
state('fermé', style({ height: '100px', opacity: 0.5, backgroundColor: 'lightblue' })),
transition('ouvert <=> fermé', [
animate('400ms ease-in-out')
])
])
]
})
export class BoiteToggleComponent {
ouvert = true;

toggle() {
this.ouvert = !this.ouvert;
}
}

Cet exemple de base illustre la structure fondamentale d’une animation dans Angular. Le composant BoiteToggleComponent utilise le décorateur @Component pour définir un déclencheur d’animation appelé ouvrirFermer. Ce déclencheur définit deux états visuels — ouvert et fermé — qui correspondent à différentes configurations de style. Angular gère automatiquement la transition entre ces états à l’aide de la fonction transition() et de la méthode animate().
La propriété [ @ouvrirFermer ] est liée à une expression booléenne ouvert ? 'ouvert' : 'fermé'. Chaque fois que la méthode toggle() est appelée, la valeur change, et Angular déclenche automatiquement la transition appropriée. Cela s’inscrit dans la logique de flux de données réactive d’Angular, où les changements d’état du composant entraînent des mises à jour visuelles cohérentes.
Ce modèle respecte les bonnes pratiques Angular : la logique reste encapsulée dans le composant, les styles sont déclaratifs, et aucune manipulation directe du DOM n’est effectuée. Cela favorise la réutilisabilité du composant et évite les re-rendus inutiles. Ce principe d’animation pilotée par l’état est la clé pour développer des interfaces utilisateur fluides et prévisibles dans des applications SPA complexes.

Exemple Pratique

typescript
TYPESCRIPT Code
import { Component } from '@angular/core';
import { trigger, style, transition, animate, query, stagger } from '@angular/animations';

@Component({
selector: 'app-liste-taches',
template: `       <button (click)="ajouterTache()">Ajouter une tâche</button>       <ul [@animationListe]="taches.length">         <li *ngFor="let tache of taches">{{ tache }}</li>       </ul>
`,
styles: [`
ul { list-style-type: none; padding: 0; }
li { background-color: #90caf9; margin: 8px 0; padding: 12px; border-radius: 4px; }
button { margin-bottom: 12px; }
`],
animations: [
trigger('animationListe', [
transition('* <=> *', [
query(':enter', [
style({ opacity: 0, transform: 'translateY(-15px)' }),
stagger('100ms', animate('300ms ease-out', style({ opacity: 1, transform: 'translateY(0)' })))
], { optional: true }),
query(':leave', [
stagger('50ms', animate('200ms ease-in', style({ opacity: 0, transform: 'translateY(20px)' })))
], { optional: true })
])
])
]
})
export class ListeTachesComponent {
taches = ['Tâche initiale'];

ajouterTache() {
this.taches.push('Tâche ' + (this.taches.length + 1));
}
}

Cet exemple pratique montre comment animer une liste dynamique en Angular, illustrant la gestion des flux de données et du cycle de vie. Le composant ListeTachesComponent applique une animation aux éléments d’une liste générée par *ngFor. Chaque fois qu’une nouvelle tâche est ajoutée, Angular détecte les changements structurels dans le DOM et déclenche des animations pour les éléments entrants et sortants.
La fonction query(':enter') sélectionne les nouveaux éléments pour appliquer un effet d’apparition progressif à l’aide de stagger(), qui échelonne l’animation de chaque élément. De même, query(':leave') anime les éléments supprimés pour assurer une transition fluide.
Ce modèle démontre la puissance du couplage entre la gestion d’état réactive et les animations déclaratives dans Angular. Aucune manipulation manuelle du DOM n’est nécessaire : tout est orchestré via le moteur d’animation et le système de détection des changements. Ce type d’implémentation est particulièrement utile pour les tableaux de bord, les notifications ou les interfaces de gestion dynamique de données. Cela garantit une expérience utilisateur fluide tout en respectant les meilleures pratiques Angular en matière de performance et de modularité.

Bonnes pratiques Angular et erreurs courantes :
Lors de l’utilisation des animations dans Angular, il est essentiel de respecter certaines bonnes pratiques. Tout d’abord, définissez toujours les animations au niveau du composant afin de maintenir l’encapsulation et d’éviter la propagation inutile d’états (prop drilling). Évitez les mutations directes d’état : préférez des mises à jour immuables pour garantir la cohérence du cycle de détection des changements.
Ne manipulez jamais directement le DOM pour déclencher une animation, car cela contourne le moteur Angular et provoque des re-rendus inutiles. Utilisez plutôt les liaisons de propriété et les transitions réactives. Pour le débogage, Angular fournit des événements d’animation et peut être observé via les outils de performance du navigateur.
Côté performance, privilégiez les transformations (transform) aux modifications dimensionnelles (height, width) afin de réduire le recalcul des mises en page. Enfin, en matière de sécurité, évitez d’animer des styles basés sur des entrées utilisateur non vérifiées. En suivant ces principes, vos animations Angular resteront fluides, sécurisées et parfaitement intégrées au cycle de vie des composants.

📊 Tableau de Référence

Angular Element/Concept Description Usage Example
trigger() Définit un déclencheur d’animation attaché à un composant trigger('fade', [...])
state() Décrit les styles d’un état visuel spécifique state('ouvert', style({opacity: 1}))
transition() Définit les conditions et la durée des changements d’état transition('fermé => ouvert', [animate('300ms')])
animate() Spécifie la durée et le type d’interpolation de l’animation animate('400ms ease-in-out')
query() Cible des éléments enfants pour appliquer des animations en séquence query(':enter', [...])
stagger() Décale dans le temps les animations des éléments enfants stagger('100ms', [...])

Résumé et prochaines étapes en Angular :
La maîtrise des animations dans Angular permet de concevoir des interfaces modernes, réactives et intuitives. Les animations contribuent à renforcer la perception des transitions, à améliorer la compréhension des changements d’état et à fluidifier l’expérience utilisateur dans les applications SPA.
Dans ce tutoriel, vous avez appris à définir des animations à l’aide de l’API d’animation d’Angular, à les relier à l’état des composants, et à les intégrer de manière performante au cycle de vie de l’application.
Pour aller plus loin, explorez les animations de transitions de routes, les fonctions réutilisables d’animations, et les optimisations spécifiques au moteur de rendu Angular. Ces compétences vous permettront de concevoir des systèmes d’interfaces riches, cohérents et évolutifs. Consultez la documentation officielle d’Angular et expérimentez les animations basées sur les événements et la navigation pour renforcer votre expertise.

🧠 Testez Vos Connaissances

Prêt à Commencer

Testez Vos Connaissances

Mettez-vous au défi avec ce quiz interactif et voyez à quel point vous comprenez le sujet

4
Questions
🎯
70%
Pour Réussir
♾️
Temps
🔄
Tentatives

📝 Instructions

  • Lisez chaque question attentivement
  • Sélectionnez la meilleure réponse pour chaque question
  • Vous pouvez refaire le quiz autant de fois que vous le souhaitez
  • Votre progression sera affichée en haut