جایگزین، اضافه یا انباشته شود؟ این سوال است.
ترکیب چندین افکت انیمیشن
ویژگی animation-composition
اجازه می دهد تا کنترل کنید که چه اتفاقی باید بیفتد وقتی چندین انیمیشن به طور همزمان روی یک ویژگی یکسان تأثیر می گذارد.
فرض کنید این تبدیل پایه روی یک عنصر اعمال شده است:
transform-origin: 50% 50%;
transform: translateX(50px) rotate(45deg);
و اینکه شما این مجموعه از فریم های کلیدی را نیز دارید:
@keyframes adjust {
to {
transform: translateX(100px);
}
}
هنگام اعمال این فریم های کلیدی بر روی یک عنصر، transform
در فریم to
جایگزین 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
. این رفتار پیش فرض است. در موقعیت پایانی، مقدار translateX(50px) rotate(45deg)
اصلی برای transform
به سادگی با 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)
میشود.