Kaikki komponentit

MotionSwap

Sisältö, joka ristihäivyttyy koon seuratessa.

WebReact NativeSisältö ja koko

Kokeile

Valmistellaan esimerkkiä…

Lyhin käyttö

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

Mitä se hoitaa puolestasi

  • Elementti muuttaa kokoaan näytöllä olevasta koosta uuden sisällön luonnolliseen kokoon, joten painikkeet eivät koskaan hyppää.
  • Vanha sisältö häipyy paikallaan, kun uusi tulee esiin; kumpikaan ei asetu uudelleen vaihdon aikana.
  • Takaisin vaihtaminen kesken vaihdon jatkaa siitä, mitä näytöllä on, kasaamatta kopioita.
  • Pelkkää tekstiä olevat lapset ovat oma value-arvonsa; anna value kaikelle muulle.

Käytä sitä

  • Tallenna, sitten Tallennetaan…, sitten Tallennettu.
  • Luuranko, josta tulee profiilikortti.
  • Toistopainike, josta tulee taukopainike.

Props

PropTyyppiOletusKuvaus
valueunknownSisällön identiteetti; uusi arvo käynnistää vaihdon. Pelkkää tekstiä olevat lapset ovat oma identiteettinsä.
childrenReactNodeSisältö.
aselement'span'Renderöitävä elementti.
inlinebooleanas === 'span'true mitoittaa sisällön mukaan (nimikkeet, kuvakkeet); false täyttää vanhemman leveyden ja animoi korkeutta.
align'start' | 'center' | 'end''center'Missä sisältö on koon muuttuessa.
effect'fade' | 'up' | 'down' | 'scale''fade'Miten sisältö saapuu ja poistuu: up nousee, down laskee, scale kasvaa.
transitionTransitionspringTiming-käyrä { duration, easing } tai jousi { tempo: 'spring', spring }. Jouset säilyttävät liikemääränsä keskeytettäessä.
onMotionComplete(value) => voidSuoritetaan, kun liike asettuu.

Muut props-arvot menevät renderöidylle elementille, joten className, style ja tapahtumankäsittelijät toimivat tavalliseen tapaan.

Web ja React Native

inline (oletus span-elementtinä renderöitäessä) animoi leveyttä ja korkeutta; inline={false} täyttää vanhemman leveyden ja animoi korkeutta.

React Nativessa inline-vaihdot mittaavat uuden sisällön yhdellä rivillä; käytä inline={false} rivittyvälle sisällölle.

Käytetty näissä esimerkeissä

Haku

Kirjoita hakeaksesi dokumentaatiosta.