Vodiči · 03

Animated komponente

Renderirajte obične elemente koji se kreću prema cilju, odgovaraju na geste i elegantno odlaze.

Animated.<tag>

Animated.div, Animated.button, Animated.svg i svaka druga HTML ili SVG oznaka renderiraju običan element bez omotača. Njihov style prima vrijednosti, a transformacije mogu biti nizovi kao u React Nativeu.

Konačni pokret transforma i opacityja na ovim elementima, uključujući opruge, može reproducirati preglednik.

Priprema primjera…

seed, pose, poses i tempo

seed je prvi kadar, pose trenutačni cilj (objekt ili naziv unosa u poses), a tempo timing ili opruga. Promjena samo tempo ne reproducira ponovno nepromijenjen cilj.

onRest se okida kad element stigne.

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

Odgovor na geste

respond preslikava geste na privremene ciljeve: hover, focus, focusWithin, press, longPress, drag, inView i druge. Kad odgovor završi, element se vraća u svoju pozu odakle god se nalazi.

onResponse javlja početak i kraj svakog odgovora, a respond={{ press: {} }} prati gestu bez ikakve vizualne promjene.

Priprema primjera…

Dijeljenje zadanih vrijednosti s Animated.Scope

Animated.Scope predaje naziv poze, tempo i zadane postavke animacije Animated elementima unutar sebe.

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

Vaše vlastite komponente

Animated.wrap(Component) — u React Nativeu createAnimatedComponent — omogućuje komponenti koja prosljeđuje ref i svodi se na jedan DOM element da prima 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 }] } }} />;

Pretraži

Tipkajte za pretraživanje dokumentacije.