是替换、添加还是累积?这就是问题所在。
组合使用多种动画效果
借助 animation-composition
属性,您可以控制当多个动画同时影响同一属性时应发生的情况。
假设您已将以下基本转换应用于某个元素:
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
:牛奶被添加到茶中,由于两者都是液体,因此可以很好地混合。
演示
在下面的演示中,有三个应用了基本 transform
和 animation
的灰色框。
虽然这些方框具有相同的动画效果,但由于它们的 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)
的转换。