Tutti i componenti

MotionSwap

Contenuto che passa in dissolvenza incrociata mentre la sua dimensione si adegua.

WebReact NativeContenuto e dimensione

Provalo

Preparazione dell’esempio…

L’uso più breve

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

Di che cosa si occupa al posto tuo

  • L’elemento si ridimensiona dalla sua dimensione sullo schermo alla dimensione naturale del nuovo contenuto, così i pulsanti non saltano mai.
  • Il vecchio contenuto svanisce dov’era mentre il nuovo compare; nessuno dei due si riposiziona durante lo scambio.
  • Tornare indietro a metà di uno scambio prosegue da ciò che è sullo schermo invece di accumulare copie.
  • I figli di solo testo sono il loro stesso value; per tutto il resto passa value.

Usalo per

  • Salva, poi Salvataggio…, poi Salvato.
  • Uno skeleton che diventa una scheda profilo.
  • Un pulsante play che diventa pausa.

Props

PropTipoPredefinitoDescrizione
valueunknownIdentità del contenuto; un nuovo valore lo scambia. I figli di solo testo sono la loro stessa identità.
childrenReactNodeIl contenuto.
aselement'span'L’elemento da renderizzare.
inlinebooleanas === 'span'true si adatta al contenuto (etichette, icone); false riempie la larghezza del genitore e anima l’altezza.
align'start' | 'center' | 'end''center'Dove si trova il contenuto mentre la dimensione cambia.
effect'fade' | 'up' | 'down' | 'scale''fade'Come entra ed esce il contenuto: up sale, down scende, scale cresce.
transitionTransitionspringUna curva di timing { duration, easing } o una molla { tempo: 'spring', spring }. Le molle conservano lo slancio quando vengono interrotte.
onMotionComplete(value) => voidViene eseguito quando il movimento si assesta.

Le altre props vanno all’elemento renderizzato, quindi className, style e gli event handler funzionano come sempre.

Web e React Native

inline (il default quando è renderizzato come span) anima larghezza e altezza; inline={false} riempie la larghezza del genitore e anima l’altezza.

Su React Native gli scambi inline misurano il nuovo contenuto su una sola riga; usa inline={false} per contenuti che vanno a capo.

Usato in questi esempi

Cerca

Scrivi per cercare nella documentazione.