Tous les composants

MotionSwap

Un contenu qui passe en fondu enchaîné pendant que sa taille suit.

WebReact NativeContenu et taille

Essayer

Préparation de l’exemple…

Usage minimal

SaveButton.jsx
<button onClick={save}>
  <MotionSwap value={status} effect="up">
    {status === 'saving' ? 'Saving…' : status === 'saved' ? 'Saved' : 'Save'}
  </MotionSwap>
</button>;

Ce qu’il gère pour vous

  • L’élément se redimensionne de sa taille à l’écran vers la taille naturelle du nouveau contenu : les boutons ne sautent jamais.
  • L’ancien contenu s’estompe là où il était pendant que le nouveau apparaît ; aucun des deux ne se recompose pendant le changement.
  • Revenir en arrière en plein changement repart de ce qui est à l’écran au lieu d’empiler des copies.
  • Les enfants en texte brut sont leur propre value ; passez value pour tout le reste.

À utiliser pour

  • Enregistrer, puis Enregistrement…, puis Enregistré.
  • Un squelette qui devient une carte de profil.
  • Un bouton lecture qui devient pause.

Props

PropTypeDéfautDescription
valueunknownIdentité du contenu ; une nouvelle valeur déclenche le changement. Les enfants en texte brut sont leur propre identité.
childrenReactNodeLe contenu.
aselement'span'L’élément à rendre.
inlinebooleanas === 'span'true dimensionne selon le contenu (libellés, icônes) ; false prend la largeur du parent et anime la hauteur.
align'start' | 'center' | 'end''center'Où se place le contenu pendant le changement de taille.
effect'fade' | 'up' | 'down' | 'scale''fade'Comment le contenu entre et sort : up monte, down descend, scale grandit.
transitionTransitionspringUne courbe de temps { duration, easing } ou un ressort { tempo: 'spring', spring }. Les ressorts gardent leur élan quand ils sont interrompus.
onMotionComplete(value) => voidS’exécute quand le mouvement se pose.

Les autres props vont à l’élément rendu : className, style et les gestionnaires d’événements fonctionnent comme d’habitude.

Web et React Native

inline (par défaut quand le rendu est un span) anime la largeur et la hauteur ; inline={false} prend la largeur du parent et anime la hauteur.

Sur React Native, les changements inline mesurent le nouveau contenu sur une seule ligne ; utilisez inline={false} pour un contenu qui passe à la ligne.

Utilisé dans ces exemples

Rechercher

Tapez pour rechercher dans la documentation.