Klatki, czas i pętla animacji, wybór GIF, CSS lub JavaScript oraz różnica między SVG i canvas. Krótka animacja elementu sklepu z uwzględnieniem ograniczenia ruchu. Lekcja 5.6 kursu INF.03.
Animacja to zmiana kolejnych obrazów lub właściwości elementu w czasie, dająca wrażenie ruchu. Na egzaminie trzeba rozpoznać sposób jej wykonania i odczytać czas, liczbę powtórzeń oraz klatki kluczowe. W praktyce przygotowujesz ruch zgodny z poleceniem, na przykład pojawienie się oznaczenia produktu, bez utrudniania odczytu i obsługi strony.
Klatka, czas i pętla
Klatka to stan obrazu wyświetlany w określonej chwili. Animowany GIF zapisuje serię klatek i czas prezentacji każdej z nich. Animacja CSS może zamiast wszystkich gotowych obrazów przechować stany kluczowe: początek i koniec, a przeglądarka wyznacza wartości pośrednie. Oba podejścia opisują ruch, ale ilość danych i możliwość reagowania na działania użytkownika są inne.
Czas trwania określa długość pojedynczego przebiegu. Animacja trwająca 2 sekundy i powtórzona trzy razy zajmuje łącznie 6 sekund, jeśli nie ma dodatkowego opóźnienia. Opóźnienie przesuwa rozpoczęcie, a nie wydłuża każdej klatki. Wartość nieskończonego powtarzania sprawia, że ruch nie kończy się sam. Przy reklamowym banerze może to stale rozpraszać osobę, która próbuje przeczytać opis produktu.
Pętla to powtarzanie sekwencji. Aby ruch nie przeskakiwał przy powrocie do początku, ostatni stan można dopasować do pierwszego albo uruchomić przebiegi naprzemienne. Trzeba jednak sprawdzić rezultat, ponieważ powrót do punktu początkowego może być zamierzoną częścią animacji. Samo ustawienie powtarzania nie tworzy płynnego przejścia między końcem a początkiem.
Storyboard, czyli plan kolejnych scen, pomaga ustalić ruch przed otwarciem programu. Dla etykiety „Nowość” w sklepie wystarczą trzy stany: ukryta, lekko uniesiona i widoczna w docelowym położeniu. Taki plan określa czas i cel animacji. Jeśli nie wiadomo, jaką informację ruch przekazuje, łatwo dodać efekt, który tylko przeszkadza.
Animowany obraz
GIF jest plikiem, który można osadzić tak jak zwykły obraz. Odtwarzanie wynika z jego zawartości, a nie z arkusza CSS strony. W edytorze obsługującym animacje przygotuj kolejne klatki o jednakowych wymiarach, ustaw czasy, sprawdź podgląd i wyeksportuj jako animację. Zapisanie zwykłego pojedynczego obrazu do GIF nie sprawi, że zacznie się poruszać.
Przygotowując animowaną instrukcję zmiany baterii myszy, zachowaj stałe kadrowanie i wystarczający czas na odczyt każdego kroku. Duża liczba klatek, duże wymiary i długi czas mogą dać ciężki plik. GIF ma ograniczoną paletę, więc filmowe ujęcia mogą wyglądać gorzej niż w formacie wideo. Nie przechowuje też dźwięku. Dla dłuższego nagrania produktu wygodniejszy bywa film z odtwarzaczem.
Przeglądarka nie daje zwykłemu <img> uniwersalnego zestawu przycisków pauzy jak dla <video>. Jeśli animacja ma trwać długo, zaplanuj sposób zatrzymania albo wybierz mechanizm, który da się kontrolować. Przygotuj również nieruchomą wersję przekazującą tę samą istotną informację. Sam tekst alternatywny opisuje znaczenie obrazu, ale nie jest przyciskiem wyłączającym ruch.
CSS: przejście i klatki kluczowe
transition (przejście) animuje zmianę wartości właściwości, gdy zmienia się stan elementu. Przykładem jest delikatne przesunięcie przycisku po najechaniu. Potrzebny jest stan początkowy, stan końcowy i czas. Bez zmiany właściwości samo przejście nie wykona ruchu. Rozwinięcie składni znajduje się w lekcji o efektach CSS. animation (animacja) odwołuje się do nazwanej sekwencji @keyframes (klatek kluczowych). Można uruchomić ją po załadowaniu elementu, bez czekania na najechanie. Dla etykiety produktu zapiszmy krótki, jednorazowy ruch. HTML powinien zawierać element z klasą nowosc i tekstem „Nowość”.
.nowosc { animation: pojawienie 600ms ease-out both; }
@keyframes pojawienie {
from { opacity: 0; transform: translateY(8px); }
to { opacity: 1; transform: translateY(0); }
}
@media (prefers-reduced-motion: reduce) {
.nowosc { animation: none; }
}
Początek ma zerowe krycie i przesunięcie o 8 px w dół, a koniec pełne krycie i brak przesunięcia. ease-out oznacza zwalnianie przy końcu. both określa zastosowanie stanów animacji poza jej aktywnym przebiegiem. Po wyłączeniu animacji element nadal jest widoczny dzięki zwykłemu układowi strony. Nie ustawiamy mu w podstawowym stylu trwałego zerowego krycia, które ukryłoby treść po rezygnacji z ruchu.
Kluczowe stany można określić procentami: 0 procent to początek, 50 środek, a 100 koniec przebiegu. Procent odnosi się do czasu, nie do szerokości ekranu. Właściwość animation-iteration-count podaje liczbę powtórzeń, animation-direction kierunek, a animation-play-state stan odtwarzania. Ich znaczenie opisuje specyfikacja animacji CSS W3C. JavaScript, SVG i canvas
JavaScript pozwala powiązać animację z obliczeniami, sterowaniem i danymi. Do pojedynczego przesunięcia nie trzeba jednak ręcznie aktualizować położenia w pętli. Skrypt może dodać klasę, a CSS wykona ruch. Dzięki temu kod zdarzenia opisuje, kiedy ma się coś wydarzyć, a arkusz stylów jak ma wyglądać przejście.
requestAnimationFrame (żądanie klatki animacji) prosi przeglądarkę o wywołanie funkcji przed kolejnym odmalowaniem. Przy ruchu liczonym w skrypcie używa się czasu przekazanego do funkcji, zamiast zakładać stałe 60 klatek na sekundę. Na innym ekranie liczba wywołań może być inna, a nieaktywna karta może otrzymywać je rzadziej. Dodawanie stałej odległości w każdym wywołaniu uzależniałoby prędkość od urządzenia.
SVG przechowuje obiekty wektorowe, które można zmieniać przez CSS lub skrypt. Symbol monitora w logo może mieć osobne elementy odpowiadające obrysowi i ekranowi. Zmiana krycia samego ekranu nie wymaga rysowania całego logo od nowa. Ważne napisy i przyciski nadal powinny mieć sensowną strukturę oraz nazwę dostępną dla technologii wspomagających.
<canvas> (płótno) udostępnia obszar rysowany poleceniami skryptu. W animacji gry lub wykresu trzeba zwykle czyścić odpowiedni obszar i ponownie rysować zmieniony stan. Narysowany prostokąt nie staje się automatycznie przyciskiem HTML z obsługą klawiatury. Canvas wymaga osobnego planu dostępności i tekstowej reprezentacji ważnych danych. Dlatego nie zastępuj nim zwykłego menu sklepu.
Ruch, który nie blokuje treści
Ograniczenie ruchu oznacza uwzględnienie preferencji osób, którym animacje utrudniają korzystanie ze strony. Zapytanie prefers-reduced-motion (preferowane ograniczenie ruchu) pozwala zrezygnować z efektów lub zmniejszyć ich intensywność. Zmiana ustawienia nie powinna ukrywać funkcji ani danych. Jeśli informacja „produkt dodany do koszyka” była pokazywana animacją, musi pozostać także jako tekst.
Ruch rozpoczynany automatycznie i trwający ponad pięć sekund obok innej treści wymaga, przy warunkach wskazanych w WCAG, możliwości zatrzymania, wstrzymania lub ukrycia. Unikamy także migania, które może stanowić zagrożenie dla odbiorców wrażliwych na błyski. Nie próbujemy uzasadniać szybkiego pulsowania tym, że etykieta jest mała. Lepiej wybrać spokojną zmianę i pozwolić skupić się na treści.
Koszt animacji zależy od właściwości i liczby elementów. Zmiana położenia przez przekształcenie oraz krycia często jest praktyczniejsza niż ciągłe przeliczanie szerokości wielu bloków. Nie stanowi to jednak gwarancji płynności. Sprawdź stronę na słabszym urządzeniu, przy przewijaniu i z dłuższymi nazwami produktów. Efekt powinien działać wraz z treścią, a nie zajmować cały czas procesora.
Na egzaminie
W pytaniu o CSS odczytaj najpierw nazwę sekwencji, potem czas, opóźnienie i powtórzenia. Trzy przebiegi po 2 sekundy to 6 sekund ruchu, natomiast opóźnienie 1 sekundy przed nimi daje zakończenie po 7 sekundach. Sekwencja z from i to ma dwa stany kluczowe, nawet jeśli przeglądarka narysuje wiele stanów pośrednich.
Pułapka: transition nie rozpoczyna ruchu bez zmiany stanu, a samo rozszerzenie GIF nie dowodzi obecności kilku klatek.
W zadaniu praktycznym wykonaj wskazaną technikę i sprawdź pełny przebieg, nie tylko jego początek. Obejrzyj koniec, powrót do początku oraz wariant z ograniczeniem ruchu. Jeśli polecenie wymaga animowanego pliku, oddaj plik animacji; kod CSS na stronie nie zastępuje takiego rezultatu.
Ściąga
GIF
gotowa sekwencja rastrowych klatek
transition
przejście po zmianie właściwości
@keyframes
nazwane stany animacji
animation-duration
czas jednego przebiegu
animation-iteration-count
liczba powtórzeń
JavaScript
sterowanie zależne od zdarzeń i danych
SVG
animowane obiekty wektorowe
Canvas
rysowanie kolejnych stanów skryptem
prefers-reduced-motion
uwzględnienie ograniczenia ruchu
Pobierz ściągę PDF