Skip to content
Mithril.js 2
Main Navigation GuideAPI

Français

English
简体中文
繁體中文
Español
Русский
Português – Brasil
Deutsch
日本語
한국어
Italiano
Polski
Türkçe
čeština
magyar

Français

English
简体中文
繁體中文
Español
Русский
Português – Brasil
Deutsch
日本語
한국어
Italiano
Polski
Türkçe
čeština
magyar

Apparence

Sidebar Navigation

Bien démarrer

Installation

Application Simple

Ressources

JSX

ES6+ sur les navigateurs anciens

Animations

Tests

Exemples

Intégration de librairies externes

Gestion des Chemins

Concepts clés

Nœuds du DOM virtuel

Composants

Méthodes de cycle de vie

Keys

Le système de rafraîchissement automatique

Divers

Comparaison des frameworks

Migration depuis la version 1.x

Migration depuis la v0.2.x

API

Sur cette page

Animations ​

Choix de technologie ​

Les animations sont souvent utilisées pour dynamiser les applications. Les navigateurs modernes offrent une bonne prise en charge des animations CSS, et il existe diverses bibliothèques qui fournissent des animations rapides basées sur JavaScript. Une API Web est également en cours de développement, accompagnée d'un polyfill pour ceux qui souhaitent utiliser les dernières technologies.

Mithril.js ne fournit pas d'API d'animation intégrée, car les options mentionnées ci-dessus sont généralement suffisantes pour créer des animations riches et complexes. Cependant, Mithril.js offre des hooks pour simplifier l'implémentation d'animations dans des cas spécifiques où cela peut s'avérer traditionnellement difficile.

Animation lors de la création d'un élément ​

Animer un élément via CSS lors de sa création est très simple :

css
.fancy {
  animation: fade-in 0.5s;
}
@keyframes fade-in {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
javascript
var FancyComponent = {
  view: function () {
    return m('.fancy', 'Hello world');
  },
};

m.mount(document.body, FancyComponent);

Animation lors de la suppression d'un élément ​

Le défi lors de l'animation avant la suppression d'un élément est de s'assurer que l'élément n'est supprimé qu'une fois l'animation terminée. Heureusement, Mithril.js offre le hook onbeforeremove qui permet de retarder la suppression d'un élément.

Créons une animation exit qui fait passer l'opacité de 1 à 0.

css
.exit {
  animation: fade-out 0.5s;
}
@keyframes fade-out {
  from {
    opacity: 1;
  }
  to {
    opacity: 0;
  }
}

Créons maintenant un composant de démonstration qui affiche et masque le FancyComponent que nous avons créé dans la section précédente :

javascript
var on = true;

var Toggler = {
  view: function () {
    return [
      m(
        'button',
        {
          onclick: function () {
            on = !on;
          },
        },
        'Toggle'
      ),
      on ? m(FancyComponent) : null,
    ];
  },
};

Modifions ensuite FancyComponent pour qu'il s'estompe lors de sa suppression :

javascript
var FancyComponent = {
  onbeforeremove: function (vnode) {
    vnode.dom.classList.add('exit');
    return new Promise(function (resolve) {
      vnode.dom.addEventListener('animationend', resolve);
    });
  },
  view: function () {
    return m('.fancy', 'Hello world');
  },
};

vnode.dom fait référence à l'élément DOM racine du composant (<div class="fancy">). Nous utilisons ici l'API classList de JavaScript pour ajouter la classe exit à <div class="fancy">.

Ensuite, nous retournons une Promise qui se résout lorsque l'événement animationend est déclenché. Lorsque nous retournons une Promise depuis onbeforeremove, Mithril.js attend que la Promise soit résolue avant de supprimer l'élément. Dans ce cas, il attend la fin de l'animation de sortie.

Nous pouvons vérifier que les animations d'entrée et de sortie fonctionnent correctement en montant le composant Toggler :

javascript
m.mount(document.body, Toggler);

Le hook onbeforeremove se déclenche uniquement sur l'élément qui perd son parentNode lorsqu'il est détaché du DOM. Ce comportement est intentionnel et vise à éviter une expérience utilisateur désagréable : que chaque animation de sortie imaginable sur la page s'exécute lors d'un changement de route. Si votre animation de sortie ne fonctionne pas, assurez-vous d'attacher le gestionnaire onbeforeremove au niveau le plus élevé possible dans l'arborescence pour vous assurer que votre code d'animation est appelé.

Performance ​

Lors de la création d'animations, il est recommandé d'utiliser uniquement les règles CSS opacity et transform, car elles peuvent être accélérées matériellement par les navigateurs modernes et offrent de meilleures performances que l'animation des propriétés top, left, width et height.

Il est également recommandé d'éviter la règle box-shadow et les sélecteurs comme :nth-child, car ils sont également gourmands en ressources. Si vous souhaitez animer une box-shadow, envisagez de placer la règle box-shadow sur un pseudo-élément et d'animer l'opacité de cet élément à la place. D'autres éléments peuvent impacter les performances : les images volumineuses ou mises à l'échelle dynamiquement, et les éléments qui se chevauchent avec différentes valeurs de position (par exemple, un élément positionné en absolu sur un élément fixe).

Pager
Page précédenteES6+ sur les navigateurs anciens
Page suivanteTests

Publié sous la licence MIT.

Copyright (c) 2024 Mithril Contributors

https://mithril.js.org/animation.html

Publié sous la licence MIT.

Copyright (c) 2024 Mithril Contributors