Określ sposób łączenia wielu efektów animacji z kompozycją animacji

Zamienić, dodać czy wykorzystać? I o to chodzi.

Łączenie wielu efektów animacji

Właściwość animation-composition pozwala kontrolować, co ma się stać, jeśli na tę samą właściwość wpływa jednocześnie wiele animacji.

Obsługa przeglądarek

  • 112
  • 112
  • 115
  • 16

Źródło

Załóżmy, że do elementu stosujesz to przekształcenie podstawowe:

transform-origin: 50% 50%;
transform: translateX(50px) rotate(45deg);

A do tego mamy ten zestaw klatek kluczowych:

@keyframes adjust {
  to {
    transform: translateX(100px);
  }
}

Gdy zastosujesz te klatki kluczowe do elementu, transform w klatce kluczowej to zastąpi dotychczasowy element transform. Jest to jego ustawienie domyślne.

Dzięki animation-composition zamiast domyślnego replace masz kontrolę nad tym, co ma się stać. Akceptowane wartości to:

  • 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 akumulacją jest niewielka. Weź na przykład 2 wartości blur(2) i blur(3). Po zsumowaniu daje wynik blur(2) blur(3), a po zsumowaniu daje blur(5).

Możesz porównać to do filiżanki napełnionej herbatą. Gdy nalewa się mleko, dzieje się tak:

  • replace: herbata zostaje usunięta i zastąpiona mlekiem.
  • add: mleko dodaje się do filiżanki, ale pozostaje nałożone na herbatę.
  • accumulate: mleko dodaje się do herbaty, a ponieważ oba produkty są płynami, dobrze się mieszają.

Demonstracyjny

W poniższej wersji demonstracyjnej widać 3 szare pola, do których zastosowano te wartości (transform i animation).

Mimo że te pola mają taką samą animację, dają inny wynik, ponieważ mają inny zbiór animation-composition:

Pierwsze pole jest ustawione na animation-composition: replace. Jest to jego ustawienie domyślne. Na pozycji końcowej pierwotna wartość translateX(50px) rotate(45deg) dla transform została po prostu zastąpiona przez translateX(100px).

Drugie pole jest ustawione na animation-composition: add. W pozycji końcowej parametr translateX(100px) jest dodawany do pierwotnego elementu translateX(50px) rotate(45deg), co daje translateX(50px) rotate(45deg) translateX(100px). Pole przesuwa się o 50 pikseli, następnie o 45 stopni i przesuwa się o 100 pikseli.

Trzecie pole jest ustawione na animation-composition: accumulate. W pozycji końcowej translateX(100px) zostanie matematycznie dodana do parametru translateX(50px) z oryginalnej przekształcenia, co spowoduje przekształcenie o wartości translateX(150px) rotate(45deg).

Fot. Alex Boyd, Unsplash