Gerak untuk React DOM · API Animated dari React Native
Tulis geraknya sekali. Berjalan mulus, tak pernah rusak.
Animated membawa Animated dari React Native ke web. Satu nilai menggerakkan elemen sebanyak apa pun tanpa render React di setiap frame, gerak yang didukung diputar oleh browser sendiri, dan setiap interupsi melanjutkan dari yang ada di layar.
npm install @kkwaenggwari/animatedSatu nilai jam menggerakkan gelombang ke-64 bentuk. Gerakkan pointer di atas panggung.
Diukur pada build ini
Diukur dengan build 1.0.0 di Chrome headless pada PC desktop. Angka bergantung pada perangkat. Cara kami mengukur
- 0.00msJavaScript per frame saat 400 elemen bergerak
Gerak transform dan opacity yang terbatas pada elemen Animated diputar oleh browser. Callback frame milik halaman tidak bekerja sama sekali.
- 0.13msJavaScript per frame saat satu nilai menggerakkan 10.000 elemen
Nilai menulis satu variabel CSS; setiap elemen menurunkan gayanya sendiri dari variabel itu di CSS.
- 0Render React selama gerak
Nilai tidak pernah melewati state React. Komponen dirender saat props Anda berubah, bukan saat frame berganti.
01 · Sederhana
API yang sudah Anda kenal, di style React biasa
timing, spring, interpolate, loop, dan Animated.event mempertahankan nama dan konfigurasi dari React Native. Nilai langsung masuk ke prop style biasa, jadi tidak ada komponen khusus yang perlu dipelajari sebelum gerak pertama.
- Bawa kode React Native dengan mengganti nama
Animated.ViewmenjadiAnimated.div. - Satu nilai bisa sekaligus menggerakkan pita, dial, dan deretan kartu, masing-masing dengan rentangnya sendiri.
useAnimatedmemiliki resepnya: dimulai saat mount, dimulai ulang saat dependensi berubah, dan dibersihkan saat unmount.
Menyiapkan contoh…
Panggilan yang sama seperti di React Native
// React Native
<Animated.View style={{ transform: [{ rotate }] }} />
// React DOM with @kkwaenggwari/animated — the rest is identical
<Animated.div style={{ transform: [{ rotate }] }} />
const spin = useAnimatedValue(0);
const rotate = spin.interpolate({ inputRange: [0, 1], outputRange: ['0deg', '360deg'] });
Animated.loop(
Animated.timing(spin, { toValue: 1, duration: 900, easing: Easing.linear, useNativeDriver: true }),
).start();02 · Cepat
Tanpa render React di setiap frame
Nilai hook adalah variabel CSS. Interpolasi linear dan aritmetika menjadi ekspresi calc() yang tepat dari variabel itu, jadi setiap frame hanya satu penulisan dan sisanya dihitung browser. Gerak transform dan opacity yang terbatas pada elemen Animated.<tag> diputar browser tanpa callback frame.
- Ubah jumlah titik: penghitung menunjukkan React merender sekali per perubahan, tidak pernah per frame.
scopemenulis nilai sekali pada wadah, bukan pada setiap elemen.inspect(element)memberi tahu jalur yang dipakai setiap properti dan alasannya.
Menyiapkan contoh…
03 · Stabil
Interupsi di mana saja. Ia melanjutkan.
Target baru dimulai dari posisi elemen di layar, dan pegas juga mempertahankan kecepatan, sehingga putar balik di tengah jalan melengkung mulus alih-alih berhenti dulu. Pengendali yang dideklarasikan di hook berhenti dan dilepas saat diganti dan saat unmount, dan markup yang dirender di server terus beranimasi setelah hidrasi.
- Klik dua kali dengan cepat: dengan
springlintasannya melengkung, dengantimingposisinya bertahan tetapi kurva baru dimulai. - Menghentikan membiarkan nilai tetap di tempatnya; tidak ada yang melompat ke keadaan akhir.
- Tidak ada loop frame yang terlupakan setelah unmount, pergantian route, atau tab tersembunyi.
Menyiapkan contoh…
Yang bisa Anda bangun
Pola lengkap dengan pengaturan yang bisa disesuaikan dan kode sumber lengkap.
Semua contoh- Dock magnetisIkon membesar saat pointer lewat, mendorong tetangganya, lalu tenang saat pointer pergi.
moveInputfollowuseAnimatedCSSmultiply - Tumpukan geserSeret kartu teratas. Melewati ambang ia terbang; jika tidak, ia memantul kembali.
dragInputuseAnimatedListenerAnimated.div - Galeri bersamaSebuah ubin membesar menjadi tampilan detail lalu mengecil kembali ke grid.
Animated.SceneAnimated.Keepmove
Dibangun dengan Animated
Butuh komponen jadi? Animated Chorus.
Angka yang bergulir, sorotan kartu yang berpindah, progres, sheet, dan daftar beranimasi yang langsung terpasang di React dan React Native. Ketiganya sedang berjalan di halaman ini.
Kunjungi Animated ChorusMulai dalam tiga menit
Instal paketnya, gerakkan nilai pertama, lalu pilih panduan untuk tugas di depan Anda.
npm install @kkwaenggwari/animated