בחרו driver, הרכיבו כמה, ודעו בדיוק מה קורה כשאחד נעצר או מוחלף.
timing, spring ו־decay
timing עוקב אחרי עקומה במשך duration קבוע. spring עוקב אחרי פיזיקה ואין לו אורך קבוע. decay מתחיל עם מהירות ומאט.
אותם drivers מקבלים מספר, ValueXY או רשומה, כך ש־{ x, y, opacity } יכולים לנוע יחד.
מכין את הדוגמה…
פרמטרים של קפיץ
השתמשו בפרמטריזציה אחת. בלי אף אחת תקבלו את קפיץ ברירת המחדל של React Native (tension 40, friction 7). ה־velocity של קפיץ היא כברירת מחדל המהירות של המסלול שהוא מפריע לו.
sequence מריץ אחד אחרי השני, parallel מריץ יחד, stagger מתחיל כל אחד אחרי השהיה, delay ממתין ו־loop חוזר. התוצאה היא שוב בקר, כך שהרכבות מתקננות זו בזו.
מכין את הדוגמה…
start, stop ו־reset
לכל בקר יש start(callback?), stop() ו־reset(). ה־callback מקבל { finished }: false כשהתנועה נעצרה או הוחלפה.
הפעלת driver חדש על אותו ערך מחליפה את הפועל מהמיקום הנוכחי. אין קפיצה לאף אחד מהקצוות.
controller.js
const move = timing(value, { toValue: 1, duration: 600 });
move.start(({ finished }) => {
// finished is false when stopped or replaced by a new animation
});
move.stop(); // keeps the value where it is on screen
move.reset(); // returns to where this animation started
לעקוב אחרי ערך אחר
toValue חי מפעיל מחדש את ה־driver בכל פעם שהערך הזה משתנה, כמו tracking ב־React Native. follow(target, source) הוא אותו חיבור קפיצי כפונקציה עם שם.
tracking.js
// A live toValue tracks another value, like React Native tracking.spring(badge, { toValue: pointer, stiffness: 300, damping: 26 }).start();
// follow() is the same connection as a named function.follow(badge, pointer, { stiffness: 300, damping: 26 });
Easing ו־keyframes
Easing תואם ל־React Native: linear, quad, cubic, sin, circle, exp, elastic, back, bounce, bezier והעזרים in, out, inOut. keyframes(value, frames, options) מוביל ערך אחד דרך כמה מספרים, עם times ו־repeat אופציונליים.