Ghiduri · 03

Componente Animated

Randați elemente obișnuite care se mișcă spre o destinație, răspund la gesturi și pleacă elegant.

Animated.<tag>

Animated.div, Animated.button, Animated.svg și orice alt tag HTML sau SVG randează un element obișnuit, fără înveliș. style-ul lor acceptă valori, iar transformările pot fi tablouri ca în React Native.

Mișcarea finită de transform și opacity pe aceste elemente, inclusiv arcurile, poate fi redată de browser.

Se pregătește exemplul…

seed, pose, poses și tempo

seed este primul cadru, pose ținta curentă (un obiect sau numele unei intrări din poses), iar tempo un timing sau un arc. Schimbarea doar a lui tempo nu redă din nou o țintă neschimbată.

onRest se declanșează când elementul ajunge.

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')}
/>;

Răspuns la gesturi

respond asociază gesturile cu ținte temporare: hover, focus, focusWithin, press, longPress, drag, inView și altele. Când răspunsul se încheie, elementul revine la poza lui de oriunde s-ar afla.

onResponse raportează începutul și sfârșitul fiecărui răspuns, iar respond={{ press: {} }} urmărește un gest fără nicio schimbare vizuală.

Se pregătește exemplul…

Valori implicite comune cu Animated.Scope

Animated.Scope transmite un nume de poză, un tempo și valori implicite de animație elementelor Animated din interior.

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

Componente proprii

Animated.wrap(Component) — createAnimatedComponent în React Native — face ca o componentă care transmite ref-ul și se rezolvă într-un singur element DOM să accepte aceleași props.

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 }] } }} />;

Căutare

Tastați pentru a căuta în documentație.