指定如何结合利用 animation-composition 来合成多个动画效果

替换、添加或累积?这正是问题所在。

布拉穆斯
布拉穆斯

组合多种动画效果

借助 animation-composition 属性,您可以控制当多个动画同时影响同一属性时应执行的操作。

浏览器支持

  • 112
  • 112
  • 115
  • 16

来源

假设您对某个元素应用了此基本转换:

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

此外,您还有下面这组关键帧:

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

将这些关键帧应用于元素时,to 关键帧中的 transform 会替换现有的 transform。这是默认行为。

借助 animation-composition,您现在可以控制应该发生的情况,而不是使用默认 replace。接受的值包括:

  • replace:效果值会替换基础值。(默认)
  • add:将效果值添加到基础值中。
  • accumulate:效果值与基础值结合使用。

加法和累加之间的差别微乎其微。以 blur(2)blur(3) 这两个值为例。相加在一起会产生 blur(2) blur(3),但累积会产生 blur(5)

就像装茶的杯子一样。将牛奶倒入水中时,会发生以下情况:

  • replace:茶会被移除,取而代之的是牛奶。
  • add:牛奶已添加到杯中,但仍然叠加在茶之上。
  • accumulate:将牛奶添加到茶中,由于它们都是液体,因此可以很好地混合。

演示

下面的演示中有三个灰色框已应用基本 transformanimation

虽然这些框具有相同的动画,但会产生不同的结果,因为它们的 animation-composition 集不同:

第一个框设置为 animation-composition: replace。这是默认行为。在结束位置,transform 的原始 translateX(50px) rotate(45deg) 值直接被 translateX(100px) 替换。

第二个框设置为 animation-composition: add。在结束位置,translateX(100px) 会添加到原始 translateX(50px) rotate(45deg) 中,从而生成 translateX(50px) rotate(45deg) translateX(100px)。这会使框移动 50 像素,然后旋转 45°,再移动 100 像素。

第三个框设置为 animation-composition: accumulate。在结束位置,translateX(100px) 将以数学方式从原始转换添加到 translateX(50px),从而产生 translateX(150px) rotate(45deg) 的转换。

照片由 Alex Boyd 拍摄,选自 Unsplash 网站