Všechny komponenty

MotionSwap

Obsah, který se prolíná, zatímco velikost ho následuje.

WebReact NativeObsah a velikost

Vyzkoušejte

Příprava příkladu…

Nejkratší použití

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

Co za vás vyřeší

  • Prvek mění velikost ze své velikosti na obrazovce na přirozenou velikost nového obsahu, takže tlačítka nikdy neskáčou.
  • Starý obsah mizí na svém místě, zatímco nový se objevuje; ani jeden se během výměny nepřeskládá.
  • Návrat uprostřed výměny pokračuje od toho, co je na obrazovce, místo aby se kopie vršily.
  • Potomci tvoření jen textem jsou sami svou value; pro vše ostatní předejte value.

Použijte pro

  • Uložit, pak Ukládání…, pak Uloženo.
  • Kostra, která se změní v kartu profilu.
  • Tlačítko přehrát, které se změní v pauzu.

Props

PropTypVýchozíPopis
valueunknownIdentita obsahu; nová hodnota vyvolá výměnu. Potomci tvoření jen textem jsou sami svou identitou.
childrenReactNodeObsah.
aselement'span'Prvek, který se renderuje.
inlinebooleanas === 'span'true přizpůsobí velikost obsahu (popisky, ikony); false vyplní šířku rodiče a animuje výšku.
align'start' | 'center' | 'end''center'Kde obsah sedí, zatímco se velikost mění.
effect'fade' | 'up' | 'down' | 'scale''fade'Jak obsah přichází a odchází: up stoupá, down klesá, scale roste.
transitionTransitionspringKřivka timing { duration, easing } nebo pružina { tempo: 'spring', spring }. Pružiny si při přerušení zachovávají hybnost.
onMotionComplete(value) => voidSpustí se, když pohyb dosedne.

Ostatní props jdou do renderovaného prvku, takže className, style a obsluhy událostí fungují jako obvykle.

Web a React Native

inline (výchozí při renderu jako span) animuje šířku i výšku; inline={false} vyplní šířku rodiče a animuje výšku.

V React Native měří výměny inline nový obsah na jednom řádku; pro obsah, který se zalamuje, použijte inline={false}.

Použito v těchto příkladech

Hledat

Pište a hledejte v dokumentaci.