Vodniki · 03

Komponente Animated

Upodabljajte navadne elemente, ki se premikajo k cilju, se odzivajo na geste in elegantno odidejo.

Animated.<tag>

Animated.div, Animated.button, Animated.svg in vsaka druga oznaka HTML ali SVG upodobijo navaden element brez ovoja. Njihov style sprejema vrednosti, transformacije pa so lahko polja kot v React Nativu.

Končno gibanje transforma in opacityja na teh elementih, vključno z vzmetmi, lahko predvaja brskalnik.

Pripravljanje primera …

seed, pose, poses in tempo

seed je prva sličica, pose trenutni cilj (objekt ali ime vnosa v poses), tempo pa timing ali vzmet. Sprememba samo tempo ne predvaja znova nespremenjenega cilja.

onRest se sproži, ko element prispe.

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

Odziv na geste

respond preslika geste v začasne cilje: hover, focus, focusWithin, press, longPress, drag, inView in druge. Ko se odziv konča, se element vrne v svojo pozo od tam, kjer koli je.

onResponse javi začetek in konec vsakega odziva, respond={{ press: {} }} pa sledi gesti brez kakršne koli vidne spremembe.

Pripravljanje primera …

Skupne privzete vrednosti z Animated.Scope

Animated.Scope posreduje ime poze, tempo in privzete vrednosti animacije elementom Animated v njem.

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

Lastne komponente

Animated.wrap(Component) — v React Nativu createAnimatedComponent — poskrbi, da komponenta, ki posreduje ref in se razreši v en element DOM, sprejema iste 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 }] } }} />;

Iskanje

Tipkajte za iskanje po dokumentaciji.