要更換、新增還是累積?這就是問題所在。
結合多種動畫效果
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)
的轉換。