0Pricing
HTML Academy · Lekcja

Animacje za pomocą requestAnimationFrame

Budowanie płynnych animacji canvas z użyciem pętli klatek animacji

Animacje za pomocą requestAnimationFrame to bezpłatna lekcja HTML Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej HTML Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs HTML Academy zawiera 4 lekcji w sumie.

Dlaczego requestAnimationFrame?

requestAnimationFrame (rAF) planuje wywołanie funkcji zwrotnej przed następnym odświeżeniem przeglądarki, synchronizując animację z częstotliwością odświeżania ekranu (zwykle 60 kl./s). W przeciwieństwie do setInterval, rAF wstrzymuje działanie, gdy karta jest ukryta, oszczędzając procesor i baterię.

Podstawowa pętla animacji

Pętla rAF: zdefiniuj funkcję animate, która rysuje bieżącą klatkę, a następnie wywołuje requestAnimationFrame(animate), aby zaplanować następną. Przeglądarka wywołuje animate przed każdym odświeżeniem, tworząc ciągłą animację z częstotliwością odświeżania ekranu.

function animate(timestamp) {
  ctx.clearRect(0, 0, canvas.width, canvas.height);
  // draw frame at current state
  draw(timestamp);
  requestAnimationFrame(animate);
}
requestAnimationFrame(animate);

Parametr timestamp

rAF przekazuje do funkcji zwrotnej wartość DOMHighResTimeStamp (liczbę milisekund od załadowania strony). Używaj jej do obliczania ruchu niezależnego od częstotliwości klatek: delta = timestamp - lastTimestamp. Pomnóż prędkość przez delta, aby niezależnie od częstotliwości klatek pokonywać tę samą odległość w ciągu sekundy.

Ruch niezależny od częstotliwości klatek

Oblicz czas, który upłynął od poprzedniej klatki, i odpowiednio przeskaluj ruch. Obiekt poruszający się z prędkością 100px/s pokonuje w każdej klatce 100 * (delta / 1000) pikseli. Zapewnia to spójne działanie fizyki na ekranach 30fps i 144fps.

Zatrzymywanie animacji

rAF zwraca uchwyt. Anuluj animację za pomocą cancelAnimationFrame(handle). Przechowuj uchwyt w zmiennej, sprawdzaj flagę running wewnątrz pętli lub anuluj animację podczas czyszczenia komponentu. Zawsze anuluj pętle, gdy element zostaje usunięty z DOM.

Schemat animacji canvas

W każdej klatce: (1) wywołaj clearRect dla całego canvasu, (2) zaktualizuj zmienne stanu (pozycję, kąt, czas), (3) narysuj wszystkie obiekty w nowych pozycjach, (4) wywołaj requestAnimationFrame dla następnej klatki. Nigdy nie pomijaj clearRect — stare klatki będą się wtedy nakładać i utworzą smugę.

Przejścia CSS a rAF

Używaj przejść i animacji CSS do prostych animacji opartych na właściwościach (efekty po najechaniu, wysuwanie modalu). Używaj rAF do złożonych, interaktywnych animacji — pętli gier, symulacji fizyki i renderowania na canvasie — gdy potrzebujesz precyzyjnej kontroli nad każdą klatką.

Podwójne buforowanie na canvasie

W przypadku złożonych scen najpierw rysuj na canvasie poza ekranem, a następnie w ramach jednej operacji narysuj go za pomocą drawImage na widocznym canvasie. Zapobiega to migotaniu, ponieważ nigdy nie jest wyświetlana częściowo narysowana klatka — widoczny canvas jest aktualizowany atomowo w każdej klatce.

Ograniczanie do docelowej liczby klatek

Ogranicz liczbę klatek do niższej wartości (np. 30fps): przed renderowaniem sprawdź, czy od ostatniego rysowania upłynęło wystarczająco dużo czasu. if (timestamp - lastDraw >= 1000/30) { draw(); lastDraw = timestamp; }. Niezależnie od tego planuj kolejne wywołania rAF, aby zachować responsywność.

Debugowanie animacji

Panel Performance w Chrome DevTools rejestruje wywołania rAF na wykresie płomieniowym JavaScriptu. Szukaj długich wywołań, które trwają ponad 16 ms — powodują one gubienie klatek. Używaj miernika FPS (Rendering → FPS Meter), aby obserwować częstotliwość klatek w czasie rzeczywistym podczas interakcji.

Alternatywa: Web Animations API

W przypadku prostszych animacji deklaratywnych, bez ręcznego zarządzania czasem, użyj: element.animate(keyframes, options). WAAPI obsługuje funkcje czasu, tryby wypełnienia i iteracje, przekazując obliczanie klatek przeglądarce. Używaj rAF do niestandardowej logiki renderowania, której nie można wyrazić za pomocą WAAPI.

Sprawdzenie wiedzy

Dlaczego w pętli requestAnimationFrame prędkość animacji należy pomnożyć przez czas delta?

Podsumowanie

requestAnimationFrame synchronizuje animację JavaScriptu z częstotliwością odświeżania ekranu i wstrzymuje ją na ukrytych kartach. Parametr timestamp umożliwia ruch niezależny od częstotliwości klatek dzięki skalowaniu przez czas delta. Schemat pętli animacji canvas (wyczyść, zaktualizuj, narysuj, zaplanuj) w połączeniu z cancelAnimationFrame podczas czyszczenia stanowi podstawę płynnych i wydajnych animacji internetowych.

Często zadawane pytania

Czy lekcja „Animacje za pomocą requestAnimationFrame” jest bezpłatna?

Tak — pełny tekst „Animacje za pomocą requestAnimationFrame” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu HTML Academy, przejdź na CoddyKit PRO. Kurs HTML Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Animacje za pomocą requestAnimationFrame”?

Budowanie płynnych animacji canvas z użyciem pętli klatek animacji Ćwiczysz HTML Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć HTML Academy?

Nie wymagamy żadnego doświadczenia. HTML Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Animacje za pomocą requestAnimationFrame”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji HTML Academy?

Tak. Każda lekcja HTML Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Konfiguracja canvas i kontekstu 2D
  2. Rysowanie prostokątów i ścieżek
  3. Tekst i obrazy na canvas
  4. Animacje za pomocą requestAnimationFrame
← Powrót do HTML Academy