คู่มือ · 02

Timing สปริง และการประกอบ

เลือก driver ผสมหลายตัว และรู้แน่ชัดว่าเกิดอะไรขึ้นเมื่อตัวหนึ่งหยุดหรือถูกแทนที่

timing, spring และ decay

timing เดินตามเส้นโค้งตลอด duration ที่กำหนด spring ทำตามฟิสิกส์และไม่มีระยะเวลาตายตัว decay เริ่มด้วยความเร็วแล้วช้าลง

driver เดียวกันรับตัวเลข ValueXY หรือเรคคอร์ด { x, y, opacity } จึงเคลื่อนไปพร้อมกันได้

กำลังเตรียมตัวอย่าง…

พารามิเตอร์ของสปริง

ใช้ชุดพารามิเตอร์เดียว ถ้าไม่ระบุจะได้สปริงเริ่มต้นของ React Native (tension 40, friction 7) velocity ของสปริงโดยค่าเริ่มต้นคือความเร็วของการเคลื่อนไหวที่มันขัดจังหวะ

springs.js
spring(value, { toValue: 1 }); // React Native default
spring(value, { toValue: 1, stiffness: 260, damping: 20 }); // physical
spring(value, { toValue: 1, bounciness: 8, speed: 12 }); // React Native style
spring(value, { toValue: 1, tension: 40, friction: 7 }); // origami style

การประกอบ

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 และคีย์เฟรม

Easing ตรงกับ React Native: linear, quad, cubic, sin, circle, exp, elastic, back, bounce, bezier และตัวช่วย in, out, inOut keyframes(value, frames, options) พาค่าเดียวผ่านตัวเลขหลายตัว โดยมี times และ repeat เป็นตัวเลือก

ค้นหา

พิมพ์เพื่อค้นหาเอกสาร