Gidsen · 03

Animated-componenten

Render gewone elementen die naar een bestemming bewegen, op gebaren reageren en sierlijk vertrekken.

Animated.<tag>

Animated.div, Animated.button, Animated.svg en elke andere HTML- of SVG-tag renderen het gewone element zonder wrapper. Hun style accepteert waarden, en transforms kunnen arrays zijn zoals in React Native.

Eindige transform- en opacity-beweging op deze elementen, veren inbegrepen, komt in aanmerking voor afspelen door de browser.

Voorbeeld voorbereiden…

seed, pose, poses en tempo

seed is het eerste frame, pose de huidige bestemming (een object of de naam van een item in poses) en tempo een timing of een veer. Alleen tempo veranderen speelt een ongewijzigde bestemming niet opnieuw af.

onRest wordt aangeroepen als het element aankomt.

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

Reageren op gebaren

respond koppelt gebaren aan tijdelijke bestemmingen: hover, focus, focusWithin, press, longPress, drag, inView en meer. Als een reactie eindigt, keert het element vanaf waar het is terug naar zijn pose.

onResponse meldt begin en eind van elke reactie, en respond={{ press: {} }} observeert een gebaar zonder visueel iets te veranderen.

Voorbeeld voorbereiden…

Deel standaarden met Animated.Scope

Animated.Scope geeft een posenaam, tempo en animatiestandaarden door aan de Animated-elementen erbinnen.

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

Je eigen componenten

Animated.wrap(Component) — createAnimatedComponent in React Native — laat een component dat een ref doorgeeft en naar één DOM-element leidt dezelfde props accepteren.

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 }] } }} />;

Zoeken

Typ om de documentatie te doorzoeken.