แอนิเมชันที่ขับเคลื่อนด้วยท่าทางด้วย use-gesture
ผสาน react-spring กับ @use-gesture/react เพื่อสร้างแอนิเมชันที่ขับเคลื่อนด้วยการลาก การบีบนิ้ว และการเลื่อน
แอนิเมชันที่ขับเคลื่อนด้วยท่าทางด้วย use-gesture เป็นบทเรียน React Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน React Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน
ภาพรวมของ @use-gesture/react
@use-gesture/react เป็นไลบรารีตรวจจับท่าทางที่ออกแบบมาให้ทำงานร่วมกับ react-spring ได้อย่างราบรื่น ไลบรารีนี้ตรวจจับท่าทาง ลาก, บีบนิ้ว, เลื่อน, วางตัวชี้, เคลื่อนที่ และ หมุนล้อเมาส์ พร้อมมอบสถานะท่าทางที่ปรับให้อยู่ในรูปแบบมาตรฐาน ซึ่งคุณสามารถส่งต่อโดยตรงไปยังตัวตั้งค่าสปริงเพื่อสร้างการโต้ตอบที่ลื่นไหลและอิงหลักฟิสิกส์
สถานะท่าทางของ useDrag
ฮุก useDrag จะเรียกใช้ฟังก์ชันเรียกกลับในทุกเหตุการณ์ลาก ฟังก์ชันเรียกกลับนี้ได้รับอ็อบเจ็กต์สถานะท่าทางที่มีคุณสมบัติสำคัญ ได้แก่ การเคลื่อนที่ (ระยะที่เคลื่อนที่ทั้งหมดนับจากจุดเริ่มลาก), ความเร็ว (ความเร็วปัจจุบัน), ทิศทาง (ค่า 1 หรือ -1 ในแต่ละแกน), แรก (เป็นจริงเมื่อเริ่มลาก), สุดท้าย (เป็นจริงเมื่อสิ้นสุดการลาก) และ เหตุการณ์ (เหตุการณ์ DOM ดิบ)
ฟังก์ชัน bind()
ฮุก use-gesture ทั้งหมดจะส่งคืนฟังก์ชัน bind() การเรียกใช้ bind() จะส่งคืนอ็อบเจ็กต์ของพร็อพตัวจัดการเหตุการณ์ (onPointerDown, onTouchStart เป็นต้น) ซึ่งคุณสามารถกระจายไปยังองค์ประกอบที่ต้องการทำให้โต้ตอบได้ นี่คือจุดเชื่อมต่อระหว่างตัวรู้จำท่าทางกับองค์ประกอบ DOM ของคุณ
การใช้ useDrag ร่วมกับ react-spring
รูปแบบมาตรฐานคือ สร้างสปริงด้วย API แบบสั่งการ ([springs, api] = useSpring(...)) จากนั้นใช้ useDrag เรียก api.start({ x: movement[0], y: movement[1] }) ในทุกเหตุการณ์ลาก สปริงจะเคลื่อนตามการลากอย่างนุ่มนวล ช่วยเพิ่มหลักฟิสิกส์ที่เป็นธรรมชาติให้กับการติดตามเคอร์เซอร์ ซึ่งหากไม่ใช้วิธีนี้จะดูแข็งกระด้าง
เด้งกลับเมื่อปล่อย
เมื่อการลากสิ้นสุดลง (last: true ในสถานะท่าทาง) โดยทั่วไปคุณจะให้วัตถุเด้งกลับไปยังจุดเริ่มต้น เรียก api.start({ x: 0, y: 0 }) ภายในการตรวจสอบ if (last) react-spring จะทำให้วัตถุเคลื่อนกลับด้วยหลักฟิสิกส์ของสปริง ซึ่งจะเด้งเบา ๆ แทนการรีเซ็ตทันที ทำให้การโต้ตอบให้ความรู้สึกเหมือนวัตถุจริงอย่างน่าพึงพอใจ
ขว้างและเหวี่ยงด้วยความเร็ว
ค่า velocity ในสถานะท่าทางช่วยให้สร้างพฤติกรรมการขว้างได้ เมื่อผู้ใช้ปล่อยวัตถุด้วยความเร็วสูง คุณสามารถเหวี่ยงวัตถุไปตามทิศทางการลากแทนที่จะให้เด้งกลับ ตรวจสอบ if (last && velocity[0] > threshold) แล้วจึงทำให้วัตถุเคลื่อนไปยังตำแหน่งสุดท้ายนอกหน้าจอ วิธีนี้จำเป็นสำหรับการโต้ตอบแบบปัดเพื่อปิด
ขอบเขตการลากและการจำกัดค่า
หากต้องการจำกัดการเคลื่อนที่ของการลากให้อยู่ภายในภาชนะ ให้จำกัดค่าการเคลื่อนที่ก่อนส่งไปยังสปริง: x: Math.max(-maxX, Math.min(maxX, movement[0])) อีกทางเลือกหนึ่งคือใช้ตัวเลือก bounds ในตัวของ use-gesture: useDrag(handler, { bounds: { left: -100, right: 100 } }) เพื่อจำกัดสถานะท่าทางโดยอัตโนมัติ
รูปแบบการปัดเพื่อปิด
การใช้งานการปัดเพื่อปิดบนอุปกรณ์เคลื่อนที่ทำได้โดยใช้ useDrag เพื่อติดตามการเคลื่อนที่ในแนวนอน หากผู้ใช้ปล่อยวัตถุด้วยความเร็วสูงกว่าเกณฑ์ OR เคลื่อนที่ไปมากกว่าครึ่งหนึ่งของความกว้างหน้าจอ ให้ทำให้การ์ดเคลื่อนออกนอกหน้าจอ (api.start({ x: window.innerWidth })) แล้วลบการ์ดนั้นออกจากรายการ มิฉะนั้นให้การ์ดเด้งกลับไปตรงกลาง
ใช้ usePinch เพื่อสร้างการโต้ตอบสำหรับการซูม
usePinch ตรวจจับท่าทางบีบนิ้วด้วยสองนิ้วบนหน้าจอสัมผัส รวมถึงการหมุนล้อเมาส์พร้อมกด Ctrl บนคอมพิวเตอร์ สถานะท่าทางประกอบด้วย scale (ระดับการซูมปัจจุบันเมื่อเทียบกับจุดเริ่มต้นการบีบนิ้ว) และ origin (จุดกึ่งกลางของการบีบนิ้ว) เชื่อมต่อกับสปริงที่ติดตามระดับการซูมเพื่อสร้างการซูมรูปภาพหรือแผนที่ที่ลื่นไหลและอยู่ภายในขอบเขต
useHover และ useMove
useHover จะทำงานเมื่อตัวชี้เข้าสู่หรือออกจากองค์ประกอบ และมอบค่าบูลีน active ให้ useMove ติดตามตำแหน่งเมาส์ภายในองค์ประกอบ พร้อมมอบพิกัดที่ปรับให้อยู่ในรูปแบบมาตรฐาน ทั้งสองอย่างมีประโยชน์สำหรับเอฟเฟกต์การวางตัวชี้แบบแม่เหล็ก ซึ่งทำให้องค์ประกอบเคลื่อนเข้าหาตัวชี้เล็กน้อยเมื่อเข้าใกล้
การรวมท่าทางหลายรูปแบบ
ฮุก use-gesture สามารถประกอบร่วมกันได้ คุณสามารถใช้ทั้ง useDrag และ usePinch กับองค์ประกอบเดียวกัน: const bindDrag = useDrag(...); const bindPinch = usePinch(...) จากนั้นกระจายฟังก์ชัน bind ทั้งสอง: ...bindDrag() ...bindPinch() โดย use-gesture จะจัดการแยกแยะระหว่างประเภทท่าทางให้โดยอัตโนมัติ
จุดประสงค์ของฟังก์ชัน bind()
ฟังก์ชัน bind() ที่ฮุก use-gesture ส่งคืนมาทำหน้าที่อะไร
สรุปบทเรียน: การผสานรวม use-gesture
@use-gesture/react มี useDrag, usePinch, useScroll, useHover และ useMove ฮุกแต่ละตัวจะส่งคืนฟังก์ชัน bind() ซึ่งผลลัพธ์จากการกระจายจะเชื่อมเหตุการณ์ท่าทางเข้ากับองค์ประกอบ DOM สถานะท่าทางจะมอบการเคลื่อนที่ ความเร็ว ทิศทาง ค่าแรก และค่าสุดท้าย ใช้ร่วมกับ api.start() แบบสั่งการของ react-spring เพื่อสร้างภาพเคลื่อนไหวแบบโต้ตอบที่อิงหลักฟิสิกส์ ใช้ความเร็วสำหรับการเหวี่ยงหรือปิด และใช้ขอบเขตเพื่อจำกัดการเคลื่อนที่
คำถามที่พบบ่อย
บทเรียน “แอนิเมชันที่ขับเคลื่อนด้วยท่าทางด้วย use-gesture” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “แอนิเมชันที่ขับเคลื่อนด้วยท่าทางด้วย use-gesture” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส React Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “แอนิเมชันที่ขับเคลื่อนด้วยท่าทางด้วย use-gesture”
ผสาน react-spring กับ @use-gesture/react เพื่อสร้างแอนิเมชันที่ขับเคลื่อนด้วยการลาก การบีบนิ้ว และการเลื่อน คุณปฏิบัติ React Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน React Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน React Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “แอนิเมชันที่ขับเคลื่อนด้วยท่าทางด้วย use-gesture” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน React Academy นี้ได้ไหม
ได้ บทเรียน React Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- พื้นฐาน React Spring: ฮุก useSpring
- คอมโพเนนต์แบบแอนิเมชันและการอินเทอร์โพเลตสไตล์
- useTrail และ useChain สำหรับลำดับแอนิเมชัน
- แอนิเมชันที่ขับเคลื่อนด้วยท่าทางด้วย use-gesture