0Pricing
React Academy · บทเรียน

แอนิเมชันจากท่าทาง: 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. คอมโพเนนต์ Motion และแอนิเมชันพื้นฐาน
  2. Variants สำหรับแอนิเมชันที่ประสานกัน
  3. แอนิเมชันจากท่าทาง: Hover, Tap และ Drag
  4. แอนิเมชันเลย์เอาต์และ AnimatePresence
← กลับไปที่ React Academy