Ръководства · 03

Компоненти на Animated

Рендерирайте обикновени елементи, които се движат към цел, отговарят на жестове и излизат елегантно.

Animated.<tag>

Animated.div, Animated.button, Animated.svg и всеки друг HTML или SVG таг рендерират обикновения елемент без обвивка. Техният style приема стойности, а трансформациите могат да са масиви, както в React Native.

Крайното движение на transform и opacity при тези елементи, включително пружините, може да се възпроизвежда от браузъра.

Подготовка на примера…

seed, pose, poses и tempo

seed е първият кадър, pose е текущата цел (обект или име на запис в poses), а tempo е timing или пружина. Промяната само на tempo не възпроизвежда отново непроменена цел.

onRest се задейства, когато елементът пристигне.

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

Отговор на жестове

respond свързва жестове с временни цели: hover, focus, focusWithin, press, longPress, drag, inView и други. Когато отговорът приключи, елементът се връща към позата си от мястото, където е.

onResponse съобщава началото и края на всеки отговор, а respond={{ press: {} }} наблюдава жест, без да променя нищо визуално.

Подготовка на примера…

Споделяне на настройки по подразбиране с Animated.Scope

Animated.Scope подава име на поза, темпо и настройки на анимацията по подразбиране на елементите на Animated в него.

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

Вашите собствени компоненти

Animated.wrap(Component) — в React Native createAnimatedComponent — позволява на компонент, който препраща ref и се свежда до един DOM елемент, да приема същите 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 }] } }} />;

Търсене

Пишете, за да търсите в документацията.