Oppaat · 03

Animated-komponentit

Renderöi tavallisia elementtejä, jotka liikkuvat kohteeseen, reagoivat eleisiin ja poistuvat tyylikkäästi.

Animated.<tag>

Animated.div, Animated.button, Animated.svg ja jokainen muu HTML- tai SVG-tagi renderöivät tavallisen elementin ilman käärettä. Niiden style hyväksyy arvoja, ja muunnokset voivat olla taulukoita kuten React Nativessa.

Näiden elementtien äärellisen transform- ja opacity-liikkeen, jouset mukaan lukien, voi toistaa selain.

Valmistellaan esimerkkiä…

seed, pose, poses ja tempo

seed on ensimmäinen ruutu, pose nykyinen kohde (objekti tai poses-kohdan nimi) ja tempo timing tai jousi. Pelkän tempo-arvon muuttaminen ei toista muuttumatonta kohdetta uudelleen.

onRest laukeaa, kun elementti saapuu.

Card.jsx
<Animated.article
  seed={{ opacity: 0, transform: [{ translateY: 16 }] }}
  pose={selected ? 'raised' : 'rest'}
  poses={{
    rest: { opacity: 1, transform: [{ translateY: 0 }, { scale: 1 }] },
    raised: { opacity: 1, transform: [{ translateY: -8 }, { scale: 1.04 }] },
  }}
  tempo={{ spring: { stiffness: 300, damping: 26 } }}
  onRest={() => console.log('arrived')}
/>;

Eleisiin reagoiminen

respond kuvaa eleet väliaikaisiksi kohteiksi: hover, focus, focusWithin, press, longPress, drag, inView ja muut. Kun reaktio päättyy, elementti palaa asentoonsa mistä tahansa se onkin.

onResponse ilmoittaa jokaisen reaktion alun ja lopun, ja respond={{ press: {} }} seuraa elettä ilman näkyvää muutosta.

Valmistellaan esimerkkiä…

Yhteiset oletukset Animated.Scopella

Animated.Scope välittää asennon nimen, tempon ja animaation oletukset sisällään oleville Animated-elementeille.

Menu.jsx
<Animated.Scope tempo={{ spring: { stiffness: 380, damping: 30 } }}>
  <Animated.li pose={{ opacity: 1 }} />
  <Animated.li pose={{ opacity: 1 }} />
</Animated.Scope>;

Omat komponentit

Animated.wrap(Component) — React Nativessa createAnimatedComponent — saa refin välittävän ja yhdeksi DOM-elementiksi ratkeavan komponentin hyväksymään samat props-arvot.

Link.jsx
import { forwardRef } from 'react';
import { Animated } from '@kkwaenggwari/animated';

const Link = forwardRef((props, ref) => <a ref={ref} {...props} />);
const AnimatedLink = Animated.wrap(Link);

<AnimatedLink href="/pricing" respond={{ hover: { transform: [{ translateX: 4 }] } }} />;

Haku

Kirjoita hakeaksesi dokumentaatiosta.