Animation-composition で複数のアニメーション効果を合成する方法を指定する

置き換え、追加、または蓄積しますか?そこで疑問があります。

複数のアニメーション効果を組み合わせる

animation-composition プロパティを使用すると、複数のアニメーションが同じプロパティに同時に作用したときの動作を制御できます。

対応ブラウザ

  • 112
  • 112
  • 115
  • 16

ソース

この基本変換を要素に適用しているとします。

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

また、次のようなキーフレーム セットがあるとします。

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

これらのキーフレームを要素に適用すると、既存の transformto キーフレーム内の transform に置き換えられます。これがデフォルト設定です。

animation-composition を使用すると、デフォルトの replace の代わりに、動作を制御することができます。次の値が利用できます。

  • replace: 効果の値によって元の値が置き換えられます。(デフォルト)
  • add: エフェクトの値が基になる値に追加されます。
  • accumulate: 効果値は基になる値と組み合わされます。

加算と累積の違いはわずかです。たとえば、blur(2)blur(3) の 2 つの値があるとします。これを加算すると blur(2) blur(3) が生成されますが、累積されると blur(5) が生成されます。

これは、お茶が入ったカップと比べることができます。そこに牛乳を注ぐと、次のようになります。

  • replace: お茶が削除され、ミルクに置き換えられます。
  • add: ミルクがカップに加えられますが、お茶の上に重ねられたままになります。
  • accumulate: ミルクを紅茶に加えます。どちらも液体であるため、うまく混ぜられます。

デモ

以下のデモでは、3 つのグレーのボックスがあり、ベースの transformanimation が適用されています。

これらのボックスのアニメーションは同じでも、animation-composition セットが異なるため、異なる結果が得られます。

最初のボックスは animation-composition: replace に設定されています。これはデフォルトの動作です。終了位置で、transform の元の translateX(50px) rotate(45deg) 値が単に translateX(100px) に置き換えられます。

2 つ目のボックスは animation-composition: add に設定されています。その終了位置で、translateX(100px) が元の translateX(50px) rotate(45deg) に追加され、translateX(50px) rotate(45deg) translateX(100px) になります。これにより、ボックスを 50 ピクセル移動させ、次に 45 度回転させ、さらに 100 ピクセル移動します。

3 つ目のボックスは animation-composition: accumulate に設定されています。その終了位置では、translateX(100px) が元の変換の translateX(50px) に数学的に追加され、translateX(150px) rotate(45deg) の変換になります。

写真撮影: Alex Boyd(出典: Unsplash