Rumah >hujung hadapan web >tutorial css >[Terjemahan] Melaksanakan Animasi dengan Pendikit dalam JavaScript
Pautan Artikel Asal
Dokumen ini menerangkan cara meningkatkan prestasi animasi menggunakan pendikit dalam JavaScript dan menggunakan pendikit untuk menyelesaikan isu animasi skrol berombak. Ia juga membandingkan perbezaan sebelum dan selepas menggunakan pendikit.
Pendikit ialah teknik yang mengehadkan fungsi dipanggil 'paling banyak sekali' dalam 'selang masa tertentu'. Dalam erti kata lain, walaupun sesuatu peristiwa berlaku beberapa kali dalam tempoh yang singkat, fungsi itu hanya akan dilaksanakan sekali dalam selang masa yang ditetapkan oleh pendikit. Contohnya, jika fungsi mempunyai pendikit 100ms, walaupun peristiwa berlaku 10 kali dalam 1 saat, fungsi itu akan dilaksanakan maksimum 10 kali (pada selang 100ms).
Pendikit boleh digunakan dalam situasi berikut:
Percubaan telah dibuat untuk melaksanakan animasi tatal yang lancar mengikut acara roda tatal, tetapi sebelum menggunakan pendikit, animasi itu berombak.
Sebab: Ini kerana peristiwa roda berlaku pada kadar yang sangat tinggi, menyebabkan fungsi window.scrollBy dipanggil secara berlebihan, menghalang penyemak imbas daripada memproses semua permintaan.
useEffect(() => { const container = scrollContainerRef.current; if (!container) return; const handleWheel = (event) => { event.preventDefault(); window.scrollBy({ left: event.deltaY, behavior: 'smooth' }); }; container.addEventListener('wheel', handleWheel); return () => { container.removeEventListener('wheel', handleWheel); }; }, []);
Dalam kod ini, fungsi handleWheel dilaksanakan setiap kali peristiwa roda berlaku. Fungsi ini mengira jumlah tatal menggunakan nilai deltaY acara dan tatal dengan memanggil tetingkap.scrollByfunction. Masalahnya ialah peristiwa roda boleh berlaku beberapa kali dalam tempoh yang sangat singkat, yang menyebabkan window.scrollBy dipanggil secara berlebihan, mengakibatkan animasi berombak.
useEffect(() => { const container = scrollContainerRef.current; if (!container) return; const handleWheel = (event) => { event.preventDefault(); window.scrollBy({ left: event.deltaY, behavior: 'smooth' }); }; container.addEventListener('wheel', handleWheel); return () => { container.removeEventListener('wheel', handleWheel); }; }, []);
Dalam kod pendikit, pembolehubah ThrottleTimer digunakan untuk mengurus pelaksanaan fungsi. Proses ini berfungsi seperti berikut:
Kelewatan Awal setTimeout
setTimeout digunakan untuk melaksanakan mekanisme pendikit. setTimeout melaksanakan fungsi panggil balik selepas kelewatan yang ditentukan (16ms dalam kes ini). Akibatnya, apabila peristiwa roda pertama berlaku, window.scrollBy digunakan selepas kelewatan 16ms. Kelewatan awal ini boleh menyebabkan tanggapan kurang responsif serta-merta, yang berpotensi ditafsirkan sebagai gagap, terutamanya dengan pergerakan roda yang pantas. (Penambahbaikan selanjutnya akan diterokai pada masa hadapan...)
Atas ialah kandungan terperinci [Terjemahan] Melaksanakan Animasi dengan Pendikit dalam JavaScript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!