Guides · 03

Animated-komponenter

Render almindelige elementer, der bevæger sig mod en destination, reagerer på gestus og forlader elegant.

Animated.<tag>

Animated.div, Animated.button, Animated.svg og alle andre HTML- eller SVG-tags renderer det almindelige element uden wrapper. Deres style tager værdier, og transforms kan være arrays som i React Native.

Endelig transform- og opacity-bevægelse på disse elementer, fjedre inklusive, kan afspilles af browseren.

Forbereder eksemplet…

seed, pose, poses og tempo

seed er den første frame, pose den aktuelle destination (et objekt eller navnet på en post i poses), og tempo en timing eller fjeder. At ændre tempo alene afspiller ikke en uændret destination igen.

onRest kaldes, når elementet ankommer.

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

Reagér på gestus

respond kobler gestus til midlertidige destinationer: hover, focus, focusWithin, press, longPress, drag, inView og flere. Når et svar slutter, vender elementet tilbage til sin pose, uanset hvor det er.

onResponse melder start og slut på hvert svar, og respond={{ press: {} }} observerer en gestus uden at ændre noget visuelt.

Forbereder eksemplet…

Del standarder med Animated.Scope

Animated.Scope giver et pose-navn, tempo og animationsstandarder videre til Animated-elementerne indeni.

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

Dine egne komponenter

Animated.wrap(Component) — createAnimatedComponent i React Native — får en komponent, der videresender ref og svarer til ét DOM-element, til at tage de samme 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 }] } }} />;

Søg

Skriv for at søge i dokumentationen.