Kurs HTML

17.8. Właściwość animation-play-state

Strona główna > Kurs CSS > Rozdział 17: Animacje CSS (@keyframes) > Właściwość animation-play-state

Do czego służy animation-play-state?

Właściwość animation-play-state pozwala na **wstrzymanie (pauzę) i wznowienie** aktualnie trwającej animacji CSS bez resetowania jej postępu.

Jest to bardzo przydatne do tworzenia interaktywnych animacji, które mogą być kontrolowane przez użytkownika (np. zatrzymanie animacji po najechaniu myszką) lub przez skrypty JavaScript.

Składnia i wartości

Właściwość animation-play-state przyjmuje jedną lub więcej wartości, oddzielonych przecinkami, odpowiadających kolejnym animacjom zdefiniowanym w animation-name.

animation-play-state: running | paused [, ...];
  • running (wartość domyślna): Animacja jest odtwarzana normalnie.
  • paused: Animacja jest wstrzymana w bieżącej klatce.

Wartość domyślna: running.

Przykład: Wstrzymanie animacji po najechaniu myszką

@keyframes obrot {
  to { transform: rotate(360deg); }
}

.logo {
  width: 100px;
  height: 100px;
  background: lightblue;
  animation-name: obrot;
  animation-duration: 5s;
  animation-iteration-count: infinite;
  animation-timing-function: linear;
  /* Domyślnie animacja działa */
  animation-play-state: running; 
}

/* Po najechaniu myszką, wstrzymaj animację */
.logo:hover {
  animation-play-state: paused;
}

W tym przykładzie logo będzie się obracać w nieskończoność, ale zatrzyma się, gdy użytkownik najedzie na nie kursorem myszy. Po zdjęciu kursora animacja zostanie wznowiona od miejsca, w którym została wstrzymana.

Jeśli lista stanów odtwarzania jest krótsza niż lista nazw animacji, wartości są powtarzane.

Jak działa wstrzymywanie i wznawianie?

Gdy animacja jest wstrzymana (paused), zapamiętuje swój aktualny postęp. Po zmianie stanu z powrotem na running, animacja kontynuuje od tego zapamiętanego punktu, uwzględniając pozostały czas trwania cyklu i inne parametry (jak animation-timing-function).

Wstrzymanie animacji nie resetuje jej licznika powtórzeń ani nie wpływa na opóźnienie (animation-delay), jeśli animacja jeszcze się nie rozpoczęła.

Zastosowania animation-play-state

  • Interaktywne animacje: Wstrzymywanie animacji przy interakcji użytkownika (:hover, :focus, kliknięcie obsługiwane przez JS).
  • Kontrola przez JavaScript: Skrypty mogą dynamicznie zmieniać animation-play-state, aby wstrzymywać i wznawiać animacje w odpowiedzi na różne zdarzenia (np. przewijanie strony, zakończenie innej operacji).
  • Debugowanie: Możliwość wstrzymania animacji w narzędziach deweloperskich (często przez zmianę tej właściwości) jest nieoceniona przy analizowaniu złożonych sekwencji.
  • Tworzenie efektów "stop-motion" (chociaż steps() jest często lepsze do tego celu).

FAQ - Najczęściej zadawane pytania

Czy mogę wstrzymać tylko jedną z wielu animacji na elemencie?

Tak. Podobnie jak inne właściwości animation-*, animation-play-state przyjmuje listę wartości. Można ustawić paused dla jednej animacji i running dla innej, podając wartości w odpowiedniej kolejności.

/* Wstrzymaj pierwszą animację, druga działa normalnie */
animation-play-state: paused, running;
Co się stanie, jeśli ustawię paused na animację, która ma opóźnienie i jeszcze się nie zaczęła?

Animacja pozostanie w stanie "oczekiwania" na upłynięcie opóźnienia. Dopiero po upływie animation-delay i zmianie stanu na running, animacja faktycznie się rozpocznie.

Czy wstrzymanie animacji wpływa na jej wydajność?

Wstrzymana animacja generalnie nie zużywa zasobów procesora na obliczanie kolejnych klatek. Zmiana stanu między running a paused jest bardzo lekką operacją.

Jak sprawdzić aktualny stan odtwarzania animacji za pomocą JavaScript?

Można odczytać obliczoną wartość stylu za pomocą window.getComputedStyle(element).animationPlayState. Zwróci ona string "running" lub "paused" (lub listę, jeśli jest ich wiele).