• 12 heures
  • Difficile

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 20/06/2022

Animez "depuis le vide"

Dans le chapitre précédent, vous avez animé des éléments HTML entre deux états nommés. Mais qu'est-ce qui se passe lorsqu'on veut animer un élément qui arrive ou part du DOM ?

Il nous faut donc une façon de gérer les transitions entre l'inexistence et l'existence : entre nos états nommés et "le vide", ou void.

Laissez un commentaire

Pour mieux visualiser l'animation que vous allez créer pour l'arrivée des commentaires, je vous propose de modifier l'implémentation de  onLeaveComment  pour ajouter le commentaire laissé au tableau  comments  local.

Je vous propose l'implémentation suivante :

onLeaveComment() {
    if (this.commentCtrl.invalid) {
        return;
    }
    const maxId = Math.max(...this.comments.map(comment => comment.id));
    this.comments.unshift({
        id: maxId + 1,
        comment: this.commentCtrl.value,
        createdDate: new Date().toISOString(),
        userId: 1
    });
    this.newComment.emit(this.commentCtrl.value);
    this.commentCtrl.reset();
}

Regardons d'abord la ligne 5 ci-dessus :

const maxId = Math.max(...this.comments.map(comment => comment.id));

La fonction  Math.max  vous retourne le nombre le plus élevé d'une liste de nombres. Vous savez que vos champs  id  correspondent à des nombres, donc pour être sûr de créer un  id  unique, vous pouvez retrouver l'id  le plus élevé et ajouter 1.

Pour ce faire, vous transformez le tableau de  Comment  en tableau de  number  avec la fonction  map  .

Ensuite, puisque  Math.max  prend les arguments les uns à la suite des autres (et non dans un tableau), vous utilisez l'opérateur spread  ...  pour éclater le tableau d'id  .

Avec ce  maxId  , vous pouvez ajouter le nouveau commentaire au début du tableau  comments  avec la fonction  unshift  :

this.comments.unshift({
    id: maxId + 1,
    comment: this.commentCtrl.value,
    createdDate: new Date().toISOString(),
    userId: 1
});

Maintenant, si vous laissez un commentaire en cliquant sur le bouton, il apparaît en haut de la liste de commentaires :

Mon nouveau commentaire !
Mon nouveau commentaire !

Animez l'arrivée dans le DOM

Pour animer l'arrivée des commentaires dans le DOM, vous allez ajouter une  transition  un peu spéciale :

transition('void => *', [
    style({
        transform: 'translateX(-100%)',
        opacity: 0,
        'background-color': 'rgb(201, 157, 242)',
    }),
    animate('250ms ease-out', style({
        transform: 'translateX(0)',
        opacity: 1,
        'background-color': 'white',
    }))
])

D'abord, la description de la transition est  'void => *'  , ce qui signifie que vous ciblez les animations depuis "le vide" vers n'importe quel autre état. En gros, vous ciblez l'arrivée d'un élément.

Ensuite, la particularité de cette  transition  est que vous définissez des styles de départ, suivis d'une animation qui contient la description de l'animation et les styles d'arrivée. Du coup, la  transition  contient toutes les informations nécessaires à l'exécution de cette animation.

Des commentaires qui arrivent
Des commentaires qui arrivent

Vous pouvez remplacer  'void => *'  par son raccourci  ':enter'  qui est un poil plus lisible !

En résumé

  • Pour animer l'arrivée d'un élément dans le DOM, créez une  transition  pour  'void => *'  (ou  ':enter' ).

  • Le premier élément du tableau de cette transition est l'objet de styles correspondant au début de l'animation.

  • Le deuxième élément est l'animation elle-même, composée de la description de l'animation suivie de l'objet de styles correspondant à la fin de l'animation.

Suivez-moi au prochain chapitre, où vous verrez comment rendre vos animations réutilisables et paramétrables !

Exemple de certificat de réussite
Exemple de certificat de réussite