Geef op hoe meerdere animatie-effecten moeten worden gecombineerd met animatiecompositie

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.

Browser Support

  • Chroom: 112.
  • Rand: 112.
  • Firefox: 115.
  • Safari: 16.

Source

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) .

Foto door Alex Boyd op Unsplash