Zastąpić, dodać czy zgromadzić? To jest pytanie.
Łączenie wielu efektów animacji
Właściwość animation-composition
umożliwia kontrolowanie tego, co powinno się stać, gdy wiele animacji wpływa jednocześnie na tę samą właściwość.
Załóżmy, że do elementu zastosowano to podstawowe przekształcenie:
transform-origin: 50% 50%;
transform: translateX(50px) rotate(45deg);
Załóżmy, że masz też ten zestaw klatek kluczowych:
@keyframes adjust {
to {
transform: translateX(100px);
}
}
Gdy zastosujesz te klatki kluczowe do elementu, transform
w klatce kluczowej to
zastąpi istniejący element transform
. Jest to zachowanie domyślne.
Dzięki animation-composition
możesz teraz kontrolować, co ma się wydarzyć zamiast domyślnego replace
. Akceptowane wartości:
replace
: wartość efektu zastępuje wartość bazową. (domyślnie)add
: wartość efektu jest dodawana do wartości bazowej.accumulate
: wartość efektu jest łączona z wartością bazową.
Różnica między dodawaniem a gromadzeniem jest niewielka. Weźmy na przykład dwie wartości: blur(2)
i blur(3)
. Po dodaniu do siebie dają blur(2) blur(3)
, ale po zsumowaniu dają blur(5)
.
Można to porównać do filiżanki herbaty. Po wlaniu do niego mleka:
replace
: herbata zostaje usunięta i zastąpiona mlekiem.add
: mleko jest dodawane do filiżanki, ale pozostaje na wierzchu herbaty.accumulate
: Mleko jest dodawane do herbaty i ponieważ oba płyny dobrze się mieszają.
Prezentacja
W poniższym przykładzie znajdują się 3 szare pola, do których zastosowano podstawowe symbole transform
i animation
.
Chociaż te pola mają tę samą animację, dają różne wyniki, ponieważ mają inny zestaw animation-composition
:
Pierwsze pole jest ustawione na animation-composition: replace
. Jest to zachowanie domyślne. W pozycji końcowej pierwotna wartość translateX(50px) rotate(45deg)
dla transform
jest po prostu zastępowana wartością translateX(100px)
.
Drugie pole jest ustawione na animation-composition: add
. W pozycji końcowej do pierwotnego translateX(50px) rotate(45deg)
dodawany jest znak translateX(100px)
, co daje translateX(50px) rotate(45deg) translateX(100px)
. Spowoduje to przesunięcie pola o 50 pikseli, obrócenie go o 45 stopni, a następnie przesunięcie o 100 pikseli.
Trzecie pole jest ustawione na animation-composition: accumulate
. W pozycji końcowej wartość translateX(100px)
zostanie matematycznie dodana do wartości translateX(50px)
z pierwotnego przekształcenia, co da przekształcenie o wartości translateX(150px) rotate(45deg)
.