Przewodniki · 03

Komponenty Animated

Renderuj zwykłe elementy, które zmierzają do celu, reagują na gesty i odchodzą z gracją.

Animated.<tag>

Animated.div, Animated.button, Animated.svg i każdy inny tag HTML lub SVG renderują zwykły element bez wrappera. Ich style przyjmuje wartości, a transformacje mogą być tablicami jak w React Native.

Skończony ruch transform i opacity na tych elementach, łącznie ze sprężynami, może być odtwarzany przez przeglądarkę.

Przygotowywanie przykładu…

seed, pose, poses i tempo

seed to pierwsza klatka, pose bieżący cel (obiekt lub nazwa wpisu w poses), a tempo to timing lub sprężyna. Sama zmiana tempo nie odtwarza ponownie niezmienionego celu.

onRest uruchamia się, gdy element dotrze na miejsce.

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

Reaguj na gesty

respond mapuje gesty na tymczasowe cele: hover, focus, focusWithin, press, longPress, drag, inView i inne. Gdy reakcja się kończy, element wraca do swojej pozy z miejsca, w którym jest.

onResponse raportuje początek i koniec każdej reakcji, a respond={{ press: {} }} obserwuje gest bez żadnej zmiany wizualnej.

Przygotowywanie przykładu…

Wspólne ustawienia domyślne z Animated.Scope

Animated.Scope przekazuje nazwę pozy, tempo i domyślne ustawienia animacji elementom Animated wewnątrz.

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

Twoje własne komponenty

Animated.wrap(Component) — w React Native createAnimatedComponent — sprawia, że komponent przekazujący ref i sprowadzający się do jednego elementu DOM przyjmuje te same 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 }] } }} />;

Szukaj

Zacznij pisać, aby przeszukać dokumentację.