Vervangen, toevoegen of accumuleren? Dat is de vraag.
Meerdere animatie-effecten combineren
Met de eigenschap animation-composition
kunt u bepalen wat er moet gebeuren als meerdere animaties tegelijkertijd dezelfde eigenschap beïnvloeden.
Stel dat u deze basistransformatie op een element toepast:
transform-origin: 50% 50%; transform: translateX(50px) rotate(45deg);
En dat je ook deze set sleutelframes hebt:
@keyframes adjust { to { transform: translateX(100px); } }
Wanneer deze keyframes op een element worden toegepast, vervangt de transform
in het to
de bestaande transform
. Dit is het standaardgedrag.
Met animation-composition
heb je nu controle over wat er moet gebeuren in plaats van de standaard replace
. Geaccepteerde waarden zijn:
-
replace
: De effectwaarde vervangt de onderliggende waarde. (standaard) -
add
: De effectwaarde wordt toegevoegd aan de onderliggende waarde. -
accumulate
: De effectwaarde wordt gecombineerd met de onderliggende waarde.
Het verschil tussen optellen en accumuleren is subtiel. Neem bijvoorbeeld de twee waarden blur(2)
en blur(3)
. Bij optelling zou dit blur(2) blur(3)
opleveren, maar bij accumulatie zou dit blur(5)
opleveren.
Je zou dit kunnen vergelijken met een kopje thee dat gevuld is met melk. Als je er melk in giet, gebeurt het volgende:
-
replace
: De thee wordt verwijderd en vervangen door de melk. -
add
: De melk wordt aan het kopje toegevoegd, maar blijft als een laagje op de thee liggen. -
accumulate
: De melk wordt aan de thee toegevoegd en omdat het beide vloeistoffen zijn, mengen ze goed.
Demonstratie
In de onderstaande demo ziet u drie grijze vakken waarop de transform
en animation
zijn toegepast.
Hoewel deze vakken dezelfde animatie hebben, leveren ze toch een ander resultaat op omdat ze een andere animation-composition
hebben:
Het eerste vakje is ingesteld op animation-composition: replace
. Dit is het standaardgedrag. In de eindpositie wordt de oorspronkelijke translateX(50px) rotate(45deg)
-waarde voor transform
simpelweg vervangen door translateX(100px)
.
Het tweede vakje is ingesteld op animation-composition: add
. In de eindpositie wordt translateX(100px)
toegevoegd aan de oorspronkelijke translateX(50px) rotate(45deg)
, wat resulteert in translateX(50px) rotate(45deg) translateX(100px)
. Dit verplaatst het vakje 50px, draait het vervolgens 45 graden en verplaatst het vervolgens 100px.
Het derde vakje is ingesteld op animation-composition: accumulate
. In de eindpositie wordt de translateX(100px)
wiskundig opgeteld bij de translateX(50px)
uit de oorspronkelijke transformatie, wat resulteert in een transformatie van translateX(150px) rotate(45deg)
.