ציון האופן שבו אפקטים של אנימציה מרובים צריכים להיות מורכבים מהרכב אנימציה

להחליף, להוסיף או לצבור? זאת השאלה.

שילוב של מספר אפקטים של אנימציה

המאפיין animation-composition מאפשר לקבוע מה צריך לקרות כשכמה אנימציות משפיעות בו-זמנית על אותו נכס.

תמיכה בדפדפן

  • 112
  • 112
  • 115
  • 16

מקור

נניח שהחלת הטרנספורמציה הבסיסית הבאה על רכיב:

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).

תמונה מאת אלכס בויד ב-UnFlood