Jadual Kandungan
Flip dan Waapi
Flip dan React
Perkara yang perlu diperhatikan
Tinggal dalam 100 milisaat
Rendering yang tidak perlu
Susun atur berjabat
Animasi dibatalkan
Jangan melawan penyemak imbas
Perpustakaan
Sumber dan rujukan
Rumah hujung hadapan web tutorial css Semua yang anda perlu tahu mengenai animasi flip dalam React

Semua yang anda perlu tahu mengenai animasi flip dalam React

Apr 05, 2025 am 09:12 AM

Semua yang anda perlu tahu mengenai animasi flip dalam React

Selepas kemas kini Safari terkini, API Animasi Web (WAAPI) kini disokong tanpa sebarang bendera dalam semua pelayar moden (kecuali IE). Berikut adalah contoh yang berguna di mana anda boleh menyemak ciri -ciri penyemak imbas anda. Waapi adalah cara yang baik untuk melaksanakan animasi (perlu dilaksanakan dalam JavaScript) kerana ia tergolong dalam API asli - yang bermaksud ia berfungsi tanpa sebarang perpustakaan tambahan. Jika anda tidak tahu Waapi sama sekali, inilah pengenalan yang sangat baik untuk pengenalan yang disediakan oleh Dan Wilson.

Flip adalah salah satu kaedah animasi yang paling berkesan. Flip memerlukan beberapa kod JavaScript untuk dijalankan.

Mari kita lihat di persimpangan menggunakan Waapi, flip dan mengintegrasikannya ke dalam React. Tetapi kita mulakan tanpa reaksi terlebih dahulu dan kemudian peralihan untuk bertindak balas.

Flip dan Waapi

Waapi menjadikan animasi flip lebih mudah!

Kajian cepat Flip: Idea teras adalah untuk meletakkan unsur pertama di mana anda mahu ia berakhir. Seterusnya, gunakan transformasi untuk memindahkannya ke kedudukan permulaan. Kemudian membatalkan penukaran ini.

Penukaran animasi sangat berkesan, jadi Flip sangat berkesan. Sebelum Waapi, kita perlu memanipulasi gaya elemen secara langsung untuk menetapkan penukaran dan tunggu bingkai seterusnya untuk membatalkan/membalikkannya:

 // flip sebelum waapi
el.style.transform = `Translate (200px)`;

requestAnimationFrame (() => {
  el.style.transform = '';
});
Salin selepas log masuk

Banyak perpustakaan dibina atas pendekatan ini. Walau bagaimanapun, terdapat beberapa masalah dengan ini:

  • Segala -galanya terasa seperti hack besar.
  • Membalikkan animasi flip sangat sukar. Walaupun penukaran CSS dibalikkan "percuma" apabila kelas dipadam, ini tidak berlaku di sini. Memulakan flip baru sementara animasi sebelumnya sedang berjalan akan menyebabkan kegagalan. Penyongsangan memerlukan matriks transformasi untuk dihuraikan menggunakan GetComputedStyles dan menggunakannya untuk mengira saiz semasa sebelum menubuhkan animasi baru.
  • Animasi lanjutan hampir mustahil. Sebagai contoh, untuk mengelakkan memesongkan anak ibu bapa yang berskala, kita perlu mengakses nilai skala semasa pada setiap bingkai. Ini hanya boleh dilakukan dengan menguraikan matriks transformasi.
  • Terdapat banyak perkara untuk memberi perhatian kepada penyemak imbas. Sebagai contoh, kadang -kadang untuk menjalankan animasi flip dengan sempurna di Firefox, anda perlu menghubungi RequestAnimationFrame dua kali:
 requestAnimationFrame (() => {
  requestAnimationFrame (() => {
    el.style.transform = '';
  });
});
Salin selepas log masuk

Kami tidak menghadapi masalah ini apabila menggunakan Waapi. Fungsi terbalik boleh dibalikkan dengan mudah. Skala terbalik kanak -kanak juga mungkin. Apabila kesilapan berlaku, mudah untuk mengetahui pelakunya, kerana kami hanya menggunakan fungsi mudah seperti bernyawa dan terbalik dan bukannya menyisir melalui pelbagai perkara seperti kaedah RequestAnimationFrame.

Berikut adalah ringkasan versi Waapi:

 el.classlist.toggle ('someclass');
const keyframes =/* hitung saiz/perbezaan kedudukan*/;
El.Animate (Keyframes, 2000);
Salin selepas log masuk

Flip dan React

Untuk memahami bagaimana animasi flip berfungsi dalam React, adalah penting untuk mengetahui bagaimana dan yang paling penting mengapa mereka bekerja di JavaScript tulen. Ingatlah komposisi animasi flip:

Semua kandungan dengan latar belakang ungu perlu berlaku sebelum langkah "menarik". Jika tidak, kita akan melihat gaya baru yang berkelip secara ringkas, yang tidak baik. Dalam React, keadaan menjadi sedikit lebih rumit, kerana semua kemas kini DOM dilakukan oleh kami.

Keajaiban animasi flip adalah bahawa unsur -unsur ditukar sebelum penyemak imbas mempunyai peluang untuk menarik. Jadi bagaimana kita tahu "sebelum melukis" momen dalam React?

Mari kita lihat cangkuk useLayoutEffect . Jika anda ingin tahu apa itu ... ini! Apa -apa sahaja yang kita lalui dalam panggilan balik ini akan berlaku serentak selepas kemas kini DOM tetapi sebelum melukis . Dalam erti kata lain, ini adalah tempat yang bagus untuk menubuhkan Flip!

Mari kita buat sesuatu yang teknologi flip sangat baik di: kedudukan dom animasi. Jika kita mahu menghidupkan bagaimana elemen bergerak dari satu kedudukan dom ke yang lain, tidak ada yang dapat dilakukan CSS. (Bayangkan menyelesaikan tugas dalam senarai tugasan dan memindahkannya ke senarai tugas yang lengkap, sama seperti anda akan mengklik pada projek dalam contoh di bawah.)

Mari lihat contoh yang paling mudah. Mengklik salah satu daripada dua blok dalam contoh berikut menyebabkan mereka menukar kedudukan. Tanpa flip, ia berlaku dengan segera.

Terdapat banyak perkara yang perlu dilakukan. Perhatikan bagaimana semua kerja berlaku dalam panggilan balik kitaran hidup: useEffect dan useLayoutEffect . Apa yang membuatnya sedikit mengelirukan adalah bahawa garis masa animasi flip kami tidak jelas dari kod itu sendiri, kerana ia berlaku dalam dua penulisan reaksi. Berikut adalah komposisi Animasi React Flip untuk memaparkan urutan operasi yang berbeza:

Walaupun useEffect selalu berjalan selepas useLayoutEffect dan selepas penyemak imbas menarik, adalah penting untuk kita cache kedudukan dan saiz unsur -unsur selepas rendering pertama. Kami tidak mempunyai peluang untuk melakukan ini dalam render kedua kerana useLayoutEffect berjalan selepas semua kemas kini DOM. Tetapi proses ini pada dasarnya sama dengan animasi flip biasa.

Perkara yang perlu diperhatikan

Seperti kebanyakan perkara, terdapat beberapa perkara yang perlu dipertimbangkan ketika menggunakan FLIP dalam React.

Tinggal dalam 100 milisaat

Animasi flip adalah pengiraan. Pengiraan mengambil masa, dan anda perlu melakukan sedikit kerja sebelum anda dapat menunjukkan penukaran 60fps yang lancar. Sekiranya kelewatan berada di bawah 100 milisaat, orang tidak akan melihat kelewatan itu, jadi pastikan semuanya berada di bawah nilai ini. Tab Prestasi di DevTools adalah tempat yang bagus untuk memeriksa kandungan ini.

Rendering yang tidak perlu

Kami tidak boleh menggunakan useState untuk saiz cache, kedudukan, dan objek animasi, kerana setiap setState akan menyebabkan penyerahan yang tidak perlu dan melambatkan permohonan. Dalam kes yang paling teruk, ia juga boleh menyebabkan kesilapan. Cuba gunakan useRef sebaliknya dan merawatnya sebagai objek yang boleh diubah suai tanpa memberikan apa -apa.

Susun atur berjabat

Elakkan pencetus susun atur penyemak imbas berulang. Dalam konteks animasi flip, ini bermakna mengelakkan gelung melalui unsur -unsur dan membaca lokasi mereka dengan getBoundingClientRect , dan kemudian animate dengan segera. Batch "Baca" dan "Tulis" sebanyak mungkin. Ini akan membolehkan animasi yang sangat lancar.

Animasi dibatalkan

Cuba klik secara rawak di dataran dalam demo sebelumnya ketika mereka bergerak, dan klik lagi setelah berhenti. Anda akan melihat kesalahannya. Dalam kehidupan sebenar, pengguna berinteraksi dengan unsur -unsur ketika mereka bergerak, jadi patut memastikan mereka dibatalkan dengan lancar, dijeda, dan dikemas kini.

Walau bagaimanapun, tidak semua animasi boleh diterbalikkan menggunakan reverse . Kadang -kadang kita mahu mereka berhenti dan kemudian berpindah ke kedudukan baru (mis. Apabila senarai elemen terganggu secara rawak). Dalam kes ini, kita perlukan:

  • Dapatkan saiz/kedudukan elemen yang dipindahkan
  • Lengkapkan animasi semasa
  • Kirakan dimensi baru dan perbezaan kedudukan
  • Mulakan Animasi Baru

Dalam React, ini lebih sukar daripada yang kelihatannya. Saya membuang banyak masa untuk mengatasi masalah ini. Objek animasi semasa mesti di -cache. Cara yang baik adalah untuk membuat peta untuk mendapatkan animasi dengan ID. Kemudian kita perlu mendapatkan saiz dan kedudukan elemen yang dipindahkan. Terdapat dua cara untuk melakukan ini:

  1. Menggunakan komponen fungsi: Hanya gelung melalui setiap elemen animasi dalam badan fungsi dan cache kedudukan semasa.
  2. Gunakan Komponen Kelas: Gunakan kaedah kitaran hayat getSnapshotBeforeUpdate .

Malah, dokumentasi React rasmi mencadangkan menggunakan getSnapshotBeforeUpdate , "kerana mungkin terdapat kelewatan antara kitaran hayat fasa rendering (seperti render ) dan kitaran hayat fasa komit (seperti getSnapshotBeforeUpdate dan componentDidUpdate ).

Jangan melawan penyemak imbas

Saya telah mengatakannya sebelum ini, tetapi elakkan berhadapan dengan penyemak imbas dan cuba membuat perkara berlaku dengan cara penyemak imbas. Jika kita perlu menghidupkan perubahan saiz mudah, maka pertimbangkan sama ada CSS mencukupi (mis. transform: scale() ). Saya mendapati bahawa animasi flip adalah yang terbaik untuk di mana penyemak imbas benar -benar tidak dapat membantu:

  • Perubahan kedudukan DOM animasi (seperti yang diterangkan di atas)
  • Animasi susun atur yang dikongsi

Yang kedua adalah versi yang lebih kompleks dari yang pertama. Terdapat dua elemen DOM yang bertindak sebagai satu keseluruhan dan mengubah kedudukannya (dan yang lain dipasang/tersembunyi). Trik ini boleh mencapai beberapa animasi yang sejuk. Sebagai contoh, animasi ini dibuat dengan perpustakaan yang saya bina dipanggil React-Easy-flip yang menggunakan kaedah ini:

Perpustakaan

Terdapat banyak perpustakaan yang boleh membuat animasi flip dalam kod boilerplate yang lebih mudah dan abstrak. Perpustakaan yang kini diselenggarakan secara aktif termasuk: react-flip-toolkit dan Perpustakaan saya react-easy-flip .

Jika anda tidak keberatan sesuatu yang lebih berat tetapi mampu animasi yang lebih umum, lihat framer-motion . Ia juga membolehkan animasi susun atur yang sejuk! Terdapat video yang meneroka perpustakaan secara mendalam.

Sumber dan rujukan

  • Animasi Josh W. Comeau-Tidak Animasi
  • Membina pengembangan prestasi tinggi dan animasi lipat oleh Paul Lewis dan Stephen McGruer
  • "Gerakan Magic Inside" oleh Matt Perry
  • @KeyFramers Tweet "Menggunakan pembolehubah CSS animasi dari JavaScript"
  • "Senarai Dalaman Pelayar Web Moden Mariko Kosaka (Bahagian 3)"
  • Animasi UI Kompleks Membina Alex Holachek dalam React
  • "Animasi susun atur dengan teknologi flip" David Khourshid "
  • Kirill Vasiltsov "Animasi Fasih Dengan Cangkuk React"
  • Jayant Bhawal's "Gunakan Cangkuk Reacts untuk Penukaran Unsur Dikongsi"

Output yang disemak semula ini mengekalkan format dan penempatan imej asal sambil memupuk teks untuk membuat kandungan yang unik. Ia juga menangani beberapa isu tatabahasa dan gaya kecil.

Atas ialah kandungan terperinci Semua yang anda perlu tahu mengenai animasi flip dalam React. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Kad yang disusun dengan kedudukan melekit dan sasaran sass Kad yang disusun dengan kedudukan melekit dan sasaran sass Apr 03, 2025 am 10:30 AM

Pada hari yang lain, saya melihat sedikit ini sangat indah dari laman web Corey Ginnivan di mana koleksi kad timbunan di atas satu sama lain semasa anda menatal.

Fon Font Google Fon Fon Font Google Fon Apr 09, 2025 am 10:42 AM

Saya melihat Font Google melancarkan reka bentuk baru (tweet). Berbanding dengan reka bentuk besar yang terakhir, ini terasa lebih berulang. Saya hampir tidak dapat memberitahu perbezaannya

Cara membuat pemasa undur animasi dengan HTML, CSS dan JavaScript Cara membuat pemasa undur animasi dengan HTML, CSS dan JavaScript Apr 11, 2025 am 11:29 AM

Pernahkah anda memerlukan pemasa undur dalam projek? Untuk sesuatu seperti itu, mungkin semula jadi untuk mencapai plugin, tetapi sebenarnya lebih banyak lagi

Kenapa kawasan -kawasan yang dikurangkan ungu di susun atur flex tersilap dianggap sebagai 'ruang limpahan'? Kenapa kawasan -kawasan yang dikurangkan ungu di susun atur flex tersilap dianggap sebagai 'ruang limpahan'? Apr 05, 2025 pm 05:51 PM

Soalan mengenai kawasan slash ungu dalam susun atur flex Apabila menggunakan susun atur flex, anda mungkin menghadapi beberapa fenomena yang mengelirukan, seperti dalam alat pemaju (D ...

Panduan Atribut Data HTML Panduan Atribut Data HTML Apr 11, 2025 am 11:50 AM

Semua yang anda ingin tahu mengenai atribut data dalam HTML, CSS, dan JavaScript.

Bagaimana untuk memilih elemen kanak -kanak dengan item nama kelas pertama melalui CSS? Bagaimana untuk memilih elemen kanak -kanak dengan item nama kelas pertama melalui CSS? Apr 05, 2025 pm 11:24 PM

Apabila bilangan elemen tidak ditetapkan, bagaimana untuk memilih elemen anak pertama nama kelas yang ditentukan melalui CSS. Semasa memproses struktur HTML, anda sering menghadapi unsur yang berbeza ...

Bukti konsep untuk menjadikan sass lebih cepat Bukti konsep untuk menjadikan sass lebih cepat Apr 16, 2025 am 10:38 AM

Pada permulaan projek baru, kompilasi SASS berlaku dalam sekejap mata. Ini terasa hebat, terutamanya apabila ia dipasangkan dengan BrowserSync, yang dimuat semula

See all articles