יצירת עקומות אנימציה מורכבות ב-CSS באמצעות פונקציית ההתאמה linear()

אנחנו שמחים להציג את linear(), פונקציית התאמה ב-CSS שמבצעת אינטרפולציה לינארית בין הנקודות שלה, וכך מאפשרת לך ליצור מחדש אפקטים של עזיבה מהדף הראשון ואפקט קפיצות.

הקלות ב-CSS

כשמוסיפים אנימציה לרכיבים ב-CSS או מעבירים אותם, אפשר לשלוט בקצב שבו ערך משתנה באמצעות פונקציית התאמה, באמצעות המאפיינים animation-timing-function ו-transition-timing-function.

יש כמה מילות מפתח שזמינות כהגדרות קבועות מראש ב-CSS, כלומר linear, ease, ease-in, ease-out ו-ease-in-out. כדי ליצור עקומות התאמה משלכם צריך להשתמש בפונקציה cubic-bezier(), או לנקוט גישה המבוססת על שלבים באמצעות פונקציית ההתאמה steps().

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

לא ניתן ליצור עקומות מורכבות, כמו אפקטים של קפיצות או קפיצות, ב-CSS, אבל עכשיו אפשר להעריך אותן בצורה מדהימה, בזכות linear().

מבוא לנושא linear()

תמיכה בדפדפן

  • 113
  • 113
  • 112
  • x

דרך חדשה להגדיר התאמה ב-CSS היא באמצעות linear(). הפונקציה הזו מקבלת מספר עצירות, מופרדות בפסיקים. כל עצירה היא מספר בודד שנע בין 0 ל-1. בין כל עצירה, האינטרפולציה מתבצעת בצורה ליניארית, שמסבירה את שם הפונקציה.

animation-timing-function: linear(0, 0.25, 1);

כברירת מחדל, העצירות האלה יפוזרו באופן שווה באופן שווה. בקטע הקוד הקודם, ערך הפלט של 0.25 ישמש בנקודת ה-50%.

בהצגה חזותית, הגרף של linear(0, 0.25, 1) נראה כך:

המחשה חזותית של תרשים לינארי(0, 0.25, 1).

אם לא רוצים לפזר את העצירות באופן שווה, אפשר לבחור באורך עצירה. כשמעבירים ערך אחד כאורך עצירה, מגדירים את נקודת ההתחלה שלו:

animation-timing-function: linear(0, 0.25 75%, 1);

במקרה הזה, לא ייעשה שימוש בערך הפלט של 0.25 בסימן 50% אלא ב-75%.

המחשה חזותית של תרשים לינארי(0, 0.25 75%, 1).

כשמציינים שני ערכים כאורך עצירה, מגדירים את נקודת ההתחלה ואת נקודת הסיום שלהם:

animation-timing-function: linear(0, 0.25 25% 75%, 1);

ערך הפלט יהיה בין 0.25 ל-75% בזמן.

המחשה חזותית של תרשים לינארי(0, 0.25 25% 75%, 1).

יצירת עקומות מורכבות עם linear()

הדוגמאות שלמעלה הן התאמות פשוטות מאוד, אבל אפשר להשתמש ב-linear() כדי ליצור מחדש פונקציות התאמה מורכבות בצורה פשוטה מאוד, עם פגיעה ברמת הדיוק.

נתייחס לעקומה של צמצום העזיבה מהדף הראשון, סוג של התאמה שלא ניתן לבטא ישירות ב-CSS, המוגדרת באמצעות JavaScript:

function easing(pos) {
  const t = 7.5625;
  const e = 2.75;
  return pos < 1 / e
    ? t * pos * pos
    : pos < 2 / e
    ? t * (pos -= 1.5 / e) * pos + 0.75
    : pos < 2.5 / e
    ? t * (pos -= 2.25 / e) * pos + 0.9375
    : t * (pos -= 2.625 / e) * pos + 0.984375;
}

הקוד לא מבטיח הרבה, אבל המחשה חזותית יכולה לעזור. זה הפלט, שמוצג כעקומה כחולה:

עקומת קפיצה חלקה המצוירת בכחול.

ניתן לפשט את העקומה על ידי הוספת עצירות ביניים. כאן, כל נקודה ירוקה מציינת עצירה:

עקומת קפיצה חלקה בצבע כחול, עם נקודות ירוקות מעליה.

כשמעבירים אותה ל-linear(), התוצאה היא עקומה שנראית כמו המקורית, אבל קצת יותר גס בקצוות.

עקומה מפושטת בירוק מעל לעקומה החלקה המקורית בכחול.

משווים את התיבה המונפשת הירוקה לתיבה הכחולה כדי להבין שהיא לא חלקה.

עם זאת, אם מוסיפים מספיק עצירות, ניתן להעריך בצורה מדויקת את העקומה המקורית. גרסה מעודכנת:

עקומה מעודכנת עם מספר עצירות כפול.

כבר מתקבלת תוצאה חלקה על ידי הכפלת מספר העצירות.

הקוד שמשמש להנפשה נראה כך:

animation-timing-function: linear(
  /* Start to 1st bounce */
  0, 0.004, 0.016, 0.035, 0.063 9.1%, 0.141, 0.25, 0.391, 0.563, 0.765, 1,
  /* 1st to 2nd bounce */
  0.891, 0.813 45.5%, 0.785, 0.766, 0.754, 0.75, 0.754, 0.766, 0.785, 0.813 63.6%, 0.891, 1 72.7%,
  /* 2nd to 3rd bounce */
  0.973, 0.953, 0.941, 0.938, 0.941, 0.953, 0.973, 1,
  /* 3rd bounce to end */
  0.988, 0.984, 0.988, 1
);

כלי שעוזר

היצירה ידנית של רשימת העצירות תהיה מסורבלת מאוד. למרבה המזל, ג'ייק ואדם יצרו כלי שיעזור לכם להמיר את עקומת ההתאמה ל-linear() המקבילה שלה.

צילום מסך של כלי מחולל ההתאמות הלינאריות.
צילום מסך של https://linear-easing-generator.netlify.app/ בפעולה.

הכלי משתמש בפונקציית התאמה של JavaScript או בעקומת SVG כקלט לצורך קלט, ומפיק את העקומה הפשוטה באמצעות linear(). אפשר להשתמש בפסי ההזזה כדי לשלוט במספר העצירות הרצוי ובדיוק שלהן.

בפינה השמאלית העליונה אפשר גם לבחור באחת מההגדרות הקבועות מראש: קפיצות, קפיצות, גומי פשוט או עיצוב חדשני תלת-ממדי מודגש.

תמיכה בכלי פיתוח

בכלי הפיתוח יש תמיכה להצגה ולעריכה של התוצאה של linear(). לחץ על הסמל כדי להציג הסבר קצר אינטראקטיבי שיאפשר לך לגרור בין התחנות.

צילום מסך של העורך &#39;linear() &#39; של Chrome DevTools.
צילום מסך של העורך 'linear() ' של Chrome DevTools.

התכונה הזו של כלי הפיתוח זמינה במשלוחים של כלי הפיתוח ב-Chrome 114.

תמונה מאת האווי מפותון ב-UnFlood