image auteur
Lucas BENTO-VERSACE 7min • 04-04-2024

Angular - Les animations

Angular - Les animations

Bienvenue sur CodeWise ! Si vous êtes nouveau ici, vous voudrez sans doute découvrir notre Starter Kit Angular : il contient une roadmap du parcours d'un dev Angular, ainsi qu'un cookbook des commandes les plus utiles et un extrait de formation. Cliquez ici pour le télécharger (c’est gratuit !)

Dans cet article, découvrez comment créer des animations avec Angular.

Modules d'animation

Il y a deux modules d'animation au sein d'Angular :

  • @angular/animations
  • @angular/platform-browser

Lorsque vous créez un projet avec la CLI, ces dépendances sont importées de base à votre projet.

Sinon importez BrowserAnimationsModule :

1
2
3
4
5
6
7
8
9
10
11
12
13
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';

@NgModule({
  imports: [
    BrowserModule,
    BrowserAnimationsModule
  ],
  declarations: [ ],
  bootstrap: [ ]
})
export class AppModule { }
app.module.ts

Fonctions d'animation

Pour utiliser des fonctions d'animations dans vos composants, importez-les depuis @angular/animations :

1
2
3
4
5
6
7
8
9
import { Component, HostBinding } from '@angular/core';
import {
  trigger,
  state,
  style,
  animate,
  transition,
  // ...
} from '@angular/animations';
your.component.ts
Voir un résumé des fonctions d'animation disponibles.

Métadonnées d'animation

Dans votre composants, ajoutez la propriété animations: [] dans le décorateur @Component() :

1
2
3
4
5
6
7
8
@Component({
    selector: 'app-your',
    templateUrl: 'app.your.html',
    styleUrls: ['app.your.css'],
    animations: [
      // animation triggers go here
    ]
  })
your.component.ts

C'est ici que se trouvera tout le code de votre animation.

Transition

Vous pouvez animer un élément HTML avec des transitions simples qui utiliseront des attributs CSS.

Utilisez la fonction state() pour qu'à la fin de chaque transition un nouvel état soit appelé. Cette fonction prend deux arguments :

  • Un nom d'état
  • Une fonction style

Utilisez la notation camelCase pour les attributs de style qui contiennent des tirets au sein de la fonction style()

La fonction state() avec la fonction style() :

1
2
3
4
5
6
// ...
state('open', style({
  height: '200px',
  opacity: 1,
  backgroundColor: 'yellow'
})),
style état 'open'
1
2
3
4
5
state('closed', style({
    height: '100px',
    opacity: 0.8,
    backgroundColor: 'blue'
  })),
style état 'close'

Selon l'état 'open' ou 'close' l'élément HTML aura une height, opacity et backgroundColor différentes.

Le Timing de transition

Pour que l'animation soit moins brute, vous devez implémenter une transition d'animation pour spécifier ce qui se produit entre les deux états.

La fonction transition() prend deux paramètres :

  • Une instruction du sens qui définit la direction entre deux états de transition
  • Une fonction animate()

La fonction animate

La fonction animate() accepte des paramètres timings et styles.

timings peut être soit un nombre, soit une string en trois parties.

1
animate(duration)
fonction animate avec nombre
1
animate ('duration delay easing')
fonction animate avec chaîne

Duration est obligatoire et peut être exprimée comme suit :

  • En tant que nombre, en millisecondes : 100
  • En chaîne, en millisecondes : '100ms'
  • En chaîne, en secondes : '0.1s'

Delay, le deuxième argument a la même syntaxe que duration.

Le troisième argument easing, contrôle l'accélération et la décélèration de l'animation exprimée en chaîne :

  • ease-in pour commencer lentement et terminer à pleine vitesse
  • ease-in-out pour démarrer lentement, accélérer au milieu, puis décélérer lentement à la fin
  • ease-out pour démarrer rapidement et décélérer lentement jusqu'à un point de repos
1
2
3
transition('open => closed', [
  animate('1s 100ms ease-out')
]),
Exemple de transition de 'open' à 'close'

styles est le deuxième paramètre (facultatif) de la fonction animate. Il permet d'appliquer du CSS uniquement pendant la transition :

1
2
3
4
5
transition ('* => open', [
  animate ('1s',
    style ({ opacity: '*' }),
  ),
])
Exemple de style appliqué à une transition

Dans cet exemple, on remarque l'opérateur => qui indique une transition unidirectionnelle. vous pouvez aussi utilisez l'opérateur bidirectionelle <=>

.

Déclencher l'animation

Une animation nécéssite d'être déclenchée pour commencer. La fonction trigger() collecte les états et transition, donne un nom à l'animation afin de l'attacher à un élément HTML déclencheur.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
@Component({
    selector: 'app-open-close',
    animations: [
      trigger('openClose', [

        state('open', style({
          height: '200px',
          opacity: 1,
          backgroundColor: 'yellow'
        })),
        state('closed', style({
          height: '100px',
          opacity: 0.8,
          backgroundColor: 'blue'
        })),
        transition('open => closed', [
          animate('1s')
        ]),
        transition('closed => open', [
          animate('0.5s')
        ]),
      ]),
    ],
    templateUrl: 'open-close.component.html',
    styleUrls: ['open-close.component.css']
  })
  export class OpenCloseComponent {
    isOpen = true;
  
    toggle() {
      this.isOpen = !this.isOpen;
    }
  
  }
your.component.ts
1
2
3
4
5
6
7
<nav>
    <button type="button" (click)="toggle()">Toggle Open/Close</button>
</nav>

<div [@openClose]="isOpen ? 'open' : 'closed'" class="open-close-container">
  <p>The box is now {{ isOpen ? 'Open' : 'Closed' }}!</p>
</div>
your.component.html

Dans cet exemple, lorsque isOpen est évaluée à 'open' ou 'closed' cela active le déclencheur openClose.

Conclusion

Dans cet article, vous avez appris à créer une animation de transition entre deux états. Cependant il y a des fonctionnalités plus avancées pour créer des animations Angular que vous verrez dans un prochain article.

J'espère que cela vous aidera, n'hésitez pas à laisser un commentaire !

Téléchargez votre Starter Kit Angular

Starter Kit Angular

En souscrivant vous recevrez :

  • Une roadmap d'un développeur Angular
  • Un cookbook Angular des commandes les plus utiles
  • Un extrait de formation

100% gratuit.

Auteur

image auteur
Lucas BENTO-VERSACE Alternant chez Codewise / Étudiant en développement web lucas.bentoversace@ynov.com
"Alternant chez Codewise, passioné par l'informatique et les technologies depuis mon plus jeune âge. J'ai découvert le monde du web et depuis je ne m'en lasse pas ! Fan de jeux vidéos, de sports et de musiques. "