Animasi dengan requestAnimationFrame
Buat animasi canvas yang halus dengan perulangan bingkai animasi.
Animasi dengan requestAnimationFrame adalah pelajaran HTML Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar HTML Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus HTML Academy mencakup 4 pelajaran total.
Mengapa requestAnimationFrame?
requestAnimationFrame (rAF) menjadwalkan callback sebelum pengecatan ulang peramban berikutnya, sehingga animasi tersinkronisasi dengan laju penyegaran tampilan (biasanya 60 FPS). Berbeda dengan setInterval, rAF berhenti sementara saat tab disembunyikan, sehingga menghemat CPU dan baterai.
Perulangan Animasi Dasar
Perulangan rAF: tentukan fungsi animasi yang menggambar bingkai saat ini, lalu panggil requestAnimationFrame(animate) untuk menjadwalkan bingkai berikutnya. Peramban memanggil animate sebelum setiap pengecatan ulang, sehingga menghasilkan animasi berkelanjutan pada laju bingkai tampilan.
function animate(timestamp) {
ctx.clearRect(0, 0, canvas.width, canvas.height);
// draw frame at current state
draw(timestamp);
requestAnimationFrame(animate);
}
requestAnimationFrame(animate);Parameter Stempel Waktu
rAF meneruskan stempel waktu DOM berpresisi tinggi (milidetik sejak halaman dimuat) ke callback. Gunakan untuk menghitung gerakan yang tidak bergantung pada laju bingkai: delta = timestamp - lastTimestamp. Kalikan kecepatan dengan delta agar jarak yang ditempuh per detik tetap sama, terlepas dari laju bingkai.
Gerakan yang Tidak Bergantung pada Laju Bingkai
Hitung waktu yang berlalu sejak bingkai terakhir dan sesuaikan gerakan berdasarkan waktu tersebut. Objek yang bergerak dengan kecepatan 100px/detik menempuh 100 * (delta / 1000) piksel per bingkai. Hal ini memastikan fisika yang konsisten pada tampilan 30 FPS dan 144 FPS.
Menghentikan Animasi
rAF mengembalikan sebuah penanda. Batalkan dengan cancelAnimationFrame(handle). Simpan penanda tersebut dalam variabel, periksa penanda berjalan di dalam perulangan, atau batalkan saat pembersihan komponen. Selalu batalkan perulangan saat elemen dihapus dari DOM.
Pola Animasi Kanvas
Di setiap bingkai: (1) clearRect seluruh kanvas, (2) perbarui variabel status (posisi, sudut, waktu), (3) gambar semua objek pada posisi baru, (4) panggil requestAnimationFrame untuk bingkai berikutnya. Jangan pernah melewatkan clearRect — bingkai lama akan menumpuk sebagai jejak.
Transisi CSS vs rAF
Gunakan transisi dan animasi CSS untuk animasi sederhana berbasis properti (efek saat diarahkan, kemunculan modal dari samping). Gunakan rAF untuk animasi kompleks dan interaktif — perulangan permainan, simulasi fisika, dan perenderan kanvas — saat Anda memerlukan kontrol terperinci atas setiap bingkai.
Penyanggaan Ganda pada Kanvas
Untuk adegan kompleks, gambar terlebih dahulu pada kanvas di luar layar, lalu gunakan drawImage untuk menggambarnya ke kanvas yang terlihat dalam satu operasi. Hal ini mencegah kedipan karena bingkai yang belum selesai digambar tidak pernah ditampilkan — kanvas yang terlihat diperbarui secara atomik di setiap bingkai.
Pembatasan ke FPS Target
Batasi ke laju bingkai yang lebih rendah (misalnya, 30 FPS): periksa apakah waktu yang cukup telah berlalu sejak penggambaran terakhir sebelum merender. if (timestamp - lastDraw >= 1000/30) { draw(); lastDraw = timestamp; }. Jadwalkan rAF tanpa memedulikan hasil pemeriksaan agar responsivitas tetap terjaga.
Mencari Kesalahan Animasi
Panel Performance di Chrome DevTools merekam callback rAF dalam bagan api JS. Cari callback panjang yang melebihi 16 md — callback tersebut menyebabkan bingkai terlewat. Gunakan pengukur FPS (Perenderan → Pengukur FPS) untuk mengamati laju bingkai secara waktu nyata selama interaksi.
Alternatif API Animasi Web
Untuk animasi deklaratif yang lebih sederhana tanpa pengaturan waktu manual: element.animate(keyframes, options). WAAPI menangani fungsi waktu, mode pengisian, dan iterasi — sehingga perhitungan bingkai dialihkan ke peramban. Gunakan rAF untuk logika perenderan khusus yang tidak dapat dinyatakan oleh WAAPI.
Uji Pengetahuan
Mengapa kecepatan animasi harus dikalikan dengan waktu delta dalam perulangan requestAnimationFrame?
Ringkasan
requestAnimationFrame menyinkronkan animasi JavaScript dengan laju penyegaran tampilan dan berhenti sementara pada tab yang tersembunyi. Parameter stempel waktu memungkinkan gerakan yang tidak bergantung pada laju bingkai melalui penskalaan berdasarkan waktu delta. Pola perulangan animasi kanvas (hapus, perbarui, gambar, jadwalkan) yang dipadukan dengan cancelAnimationFrame untuk pembersihan menjadi dasar animasi web yang halus dan efisien.
Belajar HTML dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 40
- Pelajaran
- 159
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Animasi dengan requestAnimationFrame” gratis?
Ya — teks lengkap “Animasi dengan requestAnimationFrame” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus HTML Academy, upgrade ke CoddyKit PRO. Kursus HTML Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Animasi dengan requestAnimationFrame”?
Buat animasi canvas yang halus dengan perulangan bingkai animasi. Kamu berlatih HTML Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai HTML Academy?
Tidak diperlukan pengalaman sebelumnya. HTML Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Animasi dengan requestAnimationFrame” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran HTML Academy ini?
Ya. Setiap pelajaran HTML Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Menyiapkan Canvas dan Konteks 2D
- Menggambar Persegi Panjang dan Jalur
- Teks dan Gambar pada Canvas
- Animasi dengan requestAnimationFrame