Οδηγοί · 03

Components 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 και άλλες. Όταν τελειώσει η απόκριση, το στοιχείο επιστρέφει στο pose του από όπου κι αν βρίσκεται.

Το onResponse αναφέρει την αρχή και το τέλος κάθε απόκρισης, και το respond={{ press: {} }} παρακολουθεί μια χειρονομία χωρίς καμία οπτική αλλαγή.

Προετοιμασία παραδείγματος…

Κοινές προεπιλογές με το Animated.Scope

Το Animated.Scope περνά όνομα pose, tempo και προεπιλογές κίνησης στα στοιχεία Animated μέσα του.

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

Τα δικά σας components

Το Animated.wrap(Component) — createAnimatedComponent στο React Native — κάνει ένα component που προωθεί 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 }] } }} />;

Αναζήτηση

Πληκτρολογήστε για αναζήτηση στην τεκμηρίωση.