להחליף, להוסיף או לצבור? זאת השאלה.
שילוב של כמה אפקטים של אנימציה
המאפיין 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). הפעולה הזו תזיז את התיבה ב-50px, תסובב אותה ב-45deg ואז תזיז אותה ב-100px.
התיבה השלישית מוגדרת ל-animation-composition: accumulate. במיקום הסופי, הערך translateX(100px) יתווסף מתמטית לערך translateX(50px) מהטרנספורמציה המקורית, וכתוצאה מכך תתבצע טרנספורמציה של translateX(150px) rotate(45deg).