แอนิเมชันจากท่าทาง: Hover, Tap และ Drag
ใช้ prop whileHover, whileTap และ drag เพื่อทำให้คอมโพเนนต์เคลื่อนไหวตามท่าทางของผู้ใช้
แอนิเมชันจากท่าทาง: Hover, Tap และ Drag เป็นบทเรียน React Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน React Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน
ภาพรวมพร็อพสำหรับท่าทาง
พร็อพสำหรับท่าทางของ Framer Motion ทำให้คอมโพเนนต์ทำแอนิเมชันตามการป้อนข้อมูลของผู้ใช้โดยไม่ต้องใช้ตัวจัดการเหตุการณ์ของ JavaScript พร็อพสำคัญ ได้แก่ whileHover, whileTap, whileDrag และ whileFocus
whileHover
กำหนดสถานะแอนิเมชันขณะที่เคอร์เซอร์วางอยู่เหนือองค์ประกอบ และจะคืนกลับอัตโนมัติเมื่อเคอร์เซอร์เลื่อนออก
<motion.button
whileHover={{ scale: 1.05, boxShadow: '0 10px 30px rgba(0,0,0,0.15)' }}
transition={{ type: 'spring', stiffness: 400, damping: 17 }}
>
Hover me
</motion.button>whileTap
กำหนดสถานะแอนิเมชันขณะที่องค์ประกอบถูกกด เหมาะอย่างยิ่งสำหรับการตอบสนองเมื่อกดปุ่ม
<motion.button
whileHover={{ scale: 1.05 }}
whileTap={{ scale: 0.95 }}
>
Click
</motion.button>whileFocus
ทำแอนิเมชันเมื่อองค์ประกอบได้รับโฟกัสจากแป้นพิมพ์ เหมาะสำหรับตัวบ่งชี้โฟกัสที่เข้าถึงได้
<motion.input
whileFocus={{ borderColor: '#4f46e5', boxShadow: '0 0 0 3px rgba(79,70,229,0.3)' }}
transition={{ duration: 0.2 }}
/>การเปิดใช้การลาก
เพิ่มพร็อพ drag เพื่อทำให้องค์ประกอบลากได้ ตั้งค่าเป็น true, 'x' หรือ 'y' เพื่อจำกัดแกน
<motion.div
drag
dragConstraints={{ left: -100, right: 100, top: -100, bottom: 100 }}
whileDrag={{ scale: 1.1, cursor: 'grabbing' }}
style={{ cursor: 'grab' }}
>
Drag me
</motion.div>dragConstraints กับ Ref
จำกัดการลากให้อยู่ภายในองค์ประกอบคอนเทนเนอร์โดยใช้ ref แทนค่าพิกเซล องค์ประกอบที่ลากได้จะไม่สามารถออกนอกคอนเทนเนอร์
const constraintsRef = useRef(null);
<div ref={constraintsRef} style={{ overflow: 'hidden', width: 300, height: 300 }}>
<motion.div
drag
dragConstraints={constraintsRef}
style={{ width: 80, height: 80, background: '#4f46e5' }}
/>
</div>dragElastic
dragElastic ควบคุมว่าองค์ประกอบจะถูกลากเลยขอบเขตได้มากเพียงใด (0 = ไม่มีความยืดหยุ่น, 1 = ยืดหยุ่นเต็มที่)
<motion.div
drag
dragConstraints={{ left: 0, right: 0, top: 0, bottom: 0 }}
dragElastic={0.2} // slight rubber-band effect
/>dragSnapToOrigin
การตั้งค่า dragSnapToOrigin จะทำให้องค์ประกอบดีดกลับไปยังตำแหน่งเดิมเมื่อปล่อย
<motion.div
drag
dragSnapToOrigin
dragElastic={0.5}
style={{ width: 60, height: 60, background: '#e11d48', borderRadius: '50%' }}
/>เหตุการณ์การแพน
ใช้ onPanStart, onPan และ onPanEnd เพื่อติดตามตำแหน่งเคอร์เซอร์ระหว่างท่าทางการแพน โดยไม่ต้องเปิดใช้โหมดลากเต็มรูปแบบ
<motion.div
onPan={(event, info) => {
console.log('Point:', info.point.x, info.point.y);
console.log('Delta:', info.delta.x, info.delta.y);
}}
/>เหตุการณ์การลาก
ฟังเหตุการณ์ตลอดวงจรการลาก ได้แก่ onDragStart, onDrag และ onDragEnd ออบเจ็กต์ info จะมีข้อมูลความเร็วและระยะเยื้อง
<motion.div
drag="x"
onDragEnd={(event, info) => {
if (info.velocity.x > 500) onSwipeRight();
if (info.velocity.x < -500) onSwipeLeft();
}}
/>รูปแบบการปัดการ์ด
สร้างการปัดแบบ Tinder โดยใช้ความเร็วในการลากเพื่อตรวจจับทิศทางการปัดเมื่อปล่อย
function SwipeCard({ onSwipe }) {
return (
<motion.div
drag="x"
dragConstraints={{ left: 0, right: 0 }}
dragElastic={0.7}
onDragEnd={(_, info) => {
if (Math.abs(info.velocity.x) > 400) {
onSwipe(info.velocity.x > 0 ? 'right' : 'left');
}
}}
/>
);
}ตรวจสอบความเข้าใจ
พร็อพใดของ Framer Motion ที่ทำให้องค์ประกอบซึ่งถูกลากดีดกลับไปยังตำแหน่งเดิมเมื่อปล่อย
สรุปทบทวน
ใช้ whileHover, whileTap และ whileFocus สำหรับแอนิเมชันสถานะเชิงโต้ตอบ เพิ่ม drag สำหรับองค์ประกอบที่ลากได้ จำกัดขอบเขตด้วย dragConstraints และใช้ความเร็วจาก onDragEnd เพื่อตรวจจับการปัด
คำถามที่พบบ่อย
บทเรียน “แอนิเมชันจากท่าทาง: Hover, Tap และ Drag” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “แอนิเมชันจากท่าทาง: Hover, Tap และ Drag” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส React Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “แอนิเมชันจากท่าทาง: Hover, Tap และ Drag”
ใช้ prop whileHover, whileTap และ drag เพื่อทำให้คอมโพเนนต์เคลื่อนไหวตามท่าทางของผู้ใช้ คุณปฏิบัติ React Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน React Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน React Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “แอนิเมชันจากท่าทาง: Hover, Tap และ Drag” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน React Academy นี้ได้ไหม
ได้ บทเรียน React Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- คอมโพเนนต์ Motion และแอนิเมชันพื้นฐาน
- Variants สำหรับแอนิเมชันที่ประสานกัน
- แอนิเมชันจากท่าทาง: Hover, Tap และ Drag
- แอนิเมชันเลย์เอาต์และ AnimatePresence