17.6. Właściwość animation-direction
Do czego służy animation-direction?
Właściwość animation-direction określa, **czy animacja w kolejnych cyklach powtórzeń ma być odtwarzana normalnie (od początku do końca), wstecz (od końca do początku), czy naprzemiennie**.
Jest to szczególnie istotne, gdy animacja jest powtarzana (animation-iteration-count > 1 lub infinite), ponieważ decyduje o zachowaniu animacji między cyklami.
Składnia i wartości
Właściwość animation-direction przyjmuje jedną lub więcej wartości, oddzielonych przecinkami, odpowiadających kolejnym animacjom zdefiniowanym w animation-name.
animation-direction: normal | reverse | alternate | alternate-reverse [, ...];
normal(wartość domyślna): Animacja jest odtwarzana normalnie w każdym cyklu (od0%do100%). Po zakończeniu cyklu, jeśli ma być powtórzony, animacja "przeskakuje" z powrotem do stanu początkowego (0%) i zaczyna od nowa.reverse: Animacja jest odtwarzana wstecz w każdym cyklu (od100%do0%). Po zakończeniu cyklu, jeśli ma być powtórzony, animacja "przeskakuje" z powrotem do stanu końcowego (100%) i zaczyna od nowa wstecz.alternate: Animacja jest odtwarzana normalnie (0%do100%) w cyklach nieparzystych (1, 3, 5...), a wstecz (100%do0%) w cyklach parzystych (2, 4, 6...). Zapewnia to płynne przejście między końcem jednego cyklu a początkiem następnego.alternate-reverse: Animacja jest odtwarzana wstecz (100%do0%) w cyklach nieparzystych (1, 3, 5...), a normalnie (0%do100%) w cyklach parzystych (2, 4, 6...).
Wartość domyślna: normal.
Przykład:
@keyframes ruchPilki {
from { left: 0; }
to { left: 200px; }
}
.pilka {
position: relative;
width: 50px;
height: 50px;
background: red;
border-radius: 50%;
animation-name: ruchPilki;
animation-duration: 2s;
animation-iteration-count: infinite;
}
.pilka1 { /* Normal - przeskakuje z powrotem */
animation-direction: normal;
}
.pilka2 { /* Reverse - zawsze od prawej do lewej, przeskakuje */
animation-direction: reverse;
}
.pilka3 { /* Alternate - płynnie w obie strony */
animation-direction: alternate;
}
.pilka4 { /* Alternate-reverse - płynnie, zaczynając od prawej */
animation-direction: alternate-reverse;
}
W powyższym przykładzie piłka .pilka3 będzie poruszać się najbardziej naturalnie w przód i w tył dzięki alternate.
Jeśli lista kierunków jest krótsza niż lista nazw animacji, wartości są powtarzane.
Kiedy używać poszczególnych wartości?
normal: Domyślne zachowanie, odpowiednie dla animacji, które mają się resetować po każdym cyklu (np. efekt pojawiania się).reverse: Rzadziej używane samodzielnie, ale może być przydatne do odtworzenia animacji wstecz bez modyfikowania@keyframes.alternate: Bardzo użyteczne do tworzenia płynnych, zapętlonych animacji typu "tam i z powrotem" (np. ruch wahadłowy, pulsowanie rozmiaru, zmiana koloru w obie strony).alternate-reverse: Podobne doalternate, ale zaczyna od odtworzenia animacji wstecz.
FAQ - Najczęściej zadawane pytania
Czy animation-direction działa, jeśli animation-iteration-count jest równe 1?
Jeśli animacja odtwarza się tylko raz (animation-iteration-count: 1;), to reverse spowoduje odtworzenie jej wstecz, a normal, alternate i alternate-reverse będą działać tak samo jak normal (odtworzą animację normalnie od początku do końca).
Jak animation-direction współpracuje z animation-timing-function?
Funkcja czasowa (np. ease-in-out) jest stosowana niezależnie od kierunku. Jeśli używasz reverse lub alternate w parzystych cyklach, funkcja czasowa również zostanie "odwrócona" - np. ease-in będzie działać jak ease-out podczas odtwarzania wstecz.
Czy mogę zmienić animation-direction w trakcie animacji?
Zmiana wartości animation-direction za pomocą JavaScript wpłynie na **kolejne** cykle animacji, które rozpoczną się po tej zmianie. Nie wpłynie na aktualnie trwający cykl.
Co jest bardziej wydajne: normal z przeskokiem czy alternate?
Różnica w wydajności jest zazwyczaj pomijalna. Wybór między normal a alternate powinien zależeć od pożądanego efektu wizualnego. alternate zapewnia płynniejsze przejście między cyklami dla animacji typu "tam i z powrotem".