Panduan · 03

Komponen Animated

Render elemen biasa yang bergerak menuju tujuan, merespons gestur, dan pergi dengan anggun.

Animated.<tag>

Animated.div, Animated.button, Animated.svg, dan setiap tag HTML atau SVG lain merender elemen biasa tanpa pembungkus. style-nya menerima nilai, dan transform bisa berupa array seperti di React Native.

Gerak transform dan opacity yang terbatas pada elemen-elemen ini, termasuk pegas, dapat diputar oleh browser.

Menyiapkan contoh…

seed, pose, poses, dan tempo

seed adalah frame pertama, pose tujuan saat ini (objek atau nama entri di poses), dan tempo timing atau pegas. Mengubah tempo saja tidak memutar ulang tujuan yang tidak berubah.

onRest dipicu saat elemen tiba.

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

Merespons gestur

respond memetakan gestur ke tujuan sementara: hover, focus, focusWithin, press, longPress, drag, inView, dan lainnya. Saat respons berakhir, elemen kembali ke pose-nya dari posisi mana pun.

onResponse melaporkan awal dan akhir setiap respons, dan respond={{ press: {} }} melacak gestur tanpa perubahan visual apa pun.

Menyiapkan contoh…

Berbagi nilai bawaan dengan Animated.Scope

Animated.Scope meneruskan nama pose, tempo, dan nilai bawaan animasi ke elemen Animated di dalamnya.

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

Komponen Anda sendiri

Animated.wrap(Component) — createAnimatedComponent di React Native — membuat komponen yang meneruskan ref dan menghasilkan satu elemen DOM dapat menerima props yang sama.

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

Cari

Ketik untuk mencari dokumentasi.