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

คอมโพเนนต์ Motion และแอนิเมชันพื้นฐาน

แทนที่ div ด้วย motion.div และใช้ prop animate, initial และ exit สำหรับแอนิเมชันอย่างง่าย

คอมโพเนนต์ Motion และแอนิเมชันพื้นฐาน เป็นบทเรียน React Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน React Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน

Framer Motion คืออะไร

Framer Motion เป็นไลบรารีแอนิเมชันสำหรับ React ให้แทนที่องค์ประกอบ HTML ด้วยองค์ประกอบเทียบเท่า motion.* เพื่อเพิ่มแอนิเมชันแบบประกาศผ่านพร็อพ แทนคีย์เฟรมของ CSS

การติดตั้ง

ติดตั้ง Framer Motion แล้วนำเข้า motion จากไลบรารีดังกล่าว

npm install framer-motion

import { motion } from 'framer-motion';

แอนิเมชันแรกของคุณ

แทนที่ <div> ด้วย <motion.div> แล้วเพิ่มพร็อพ initial, animate และ transition

<motion.div
  initial={{ opacity: 0, y: -20 }}
  animate={{ opacity: 1, y: 0 }}
  transition={{ duration: 0.4 }}
>
  Hello, Framer Motion!
</motion.div>

พร็อพ initial

initial กำหนดสถานะเริ่มต้นของแอนิเมชัน หรือจุดที่องค์ประกอบเริ่มต้นก่อนจะเคลื่อนไปยัง animate

// Fade in from left
<motion.div
  initial={{ opacity: 0, x: -50 }}
  animate={{ opacity: 1, x: 0 }}
/>

// Scale up from center
<motion.button
  initial={{ scale: 0 }}
  animate={{ scale: 1 }}
/>

พร็อพ animate

animate กำหนดสถานะเป้าหมาย Framer Motion จะคำนวณค่าระหว่าง initial และ animate โดยใช้ฟิสิกส์ของสปริงหรือการผ่อนค่าที่ระบุ

<motion.h1
  initial={{ opacity: 0 }}
  animate={{ opacity: 1, color: '#4f46e5' }}
  transition={{ duration: 0.6, ease: 'easeOut' }}
>
  Welcome
</motion.h1>

ตัวเลือกการเปลี่ยนผ่าน

พร็อพ transition ควบคุมลักษณะการเคลื่อนที่ของแอนิเมชัน ได้แก่ duration, ease, delay และ type ('spring' | 'tween' | 'inertia')

transition={{
  type: 'spring',
  stiffness: 300,
  damping: 20,
  delay: 0.2,
}}

คีย์เฟรมใน animate

ส่งอาร์เรย์ให้ค่าที่ทำแอนิเมชันใด ๆ เพื่อสร้างแอนิเมชันแบบคีย์เฟรมที่เคลื่อนผ่านหลายสถานะ

<motion.div
  animate={{ x: [0, 30, 0] }}
  transition={{ duration: 1, repeat: Infinity, ease: 'easeInOut' }}
/>

สถานะเมื่อวางเมาส์และแตะ

whileHover และ whileTap กำหนดสถานะที่ทำแอนิเมชันสำหรับการวางเมาส์และการกด โดยจะคืนกลับอัตโนมัติเมื่อท่าทางสิ้นสุดลง

<motion.button
  whileHover={{ scale: 1.05, backgroundColor: '#4f46e5' }}
  whileTap={{ scale: 0.95 }}
  style={{ backgroundColor: '#6366f1' }}
>
  Press me
</motion.button>

ทำแอนิเมชันเมื่อเลื่อนด้วย inView

ใช้พร็อพ whileInView เพื่อเรียกใช้แอนิเมชันเมื่อองค์ประกอบเลื่อนเข้าสู่พื้นที่แสดงผล

<motion.section
  initial={{ opacity: 0, y: 40 }}
  whileInView={{ opacity: 1, y: 0 }}
  viewport={{ once: true, amount: 0.3 }}
  transition={{ duration: 0.5 }}
>
  <h2>Revealed on scroll</h2>
</motion.section>

พร็อพ exit กับ AnimatePresence

exit กำหนดแอนิเมชันเมื่อถอดคอมโพเนนต์ออกจากการแสดงผล โดยจะทำงานได้เฉพาะเมื่อครอบไว้ด้วย <AnimatePresence>

import { motion, AnimatePresence } from 'framer-motion';

<AnimatePresence>
  {isVisible && (
    <motion.div
      key="modal"
      initial={{ opacity: 0 }}
      animate={{ opacity: 1 }}
      exit={{ opacity: 0, scale: 0.95 }}
    />
  )}
</AnimatePresence>

useAnimate สำหรับการควบคุมแบบสั่งการ

useAnimate() ส่งคืน ref ของ scope และฟังก์ชัน animate สำหรับควบคุมแอนิเมชันด้วยโปรแกรม นอกระบบพร็อพแบบประกาศ

import { useAnimate } from 'framer-motion';

function ShakeButton() {
  const [scope, animate] = useAnimate();
  const handleClick = async () => {
    await animate(scope.current, { x: [-10, 10, -10, 0] }, { duration: 0.3 });
  };
  return <motion.button ref={scope} onClick={handleClick}>Shake</motion.button>;
}

การลดการเคลื่อนไหว

เคารพการตั้งค่าลดการเคลื่อนไหวของผู้ใช้ด้วยฮุก useReducedMotion()

import { useReducedMotion } from 'framer-motion';

function AnimatedCard() {
  const shouldReduce = useReducedMotion();
  return (
    <motion.div
      animate={{ opacity: 1, y: shouldReduce ? 0 : -20 }}
    />
  );
}

ตรวจสอบความเข้าใจ

พร็อพใดของ Framer Motion ที่กำหนดสถานะแอนิเมชันซึ่งคอมโพเนนต์ควรไปถึง หรือสถานะเป้าหมาย

สรุปทบทวน

แทนที่องค์ประกอบ HTML ด้วยองค์ประกอบเทียบเท่า motion.* ใช้ initial สำหรับสถานะเริ่มต้น ใช้ animate สำหรับเป้าหมาย ใช้ transition สำหรับจังหวะเวลา ใช้ whileHover/whileTap สำหรับท่าทาง และใช้ whileInView สำหรับแอนิเมชันที่เรียกใช้เมื่อเลื่อนหน้าจอ

คำถามที่พบบ่อย

บทเรียน “คอมโพเนนต์ Motion และแอนิเมชันพื้นฐาน” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “คอมโพเนนต์ Motion และแอนิเมชันพื้นฐาน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส React Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “คอมโพเนนต์ Motion และแอนิเมชันพื้นฐาน”

แทนที่ div ด้วย motion.div และใช้ prop animate, initial และ exit สำหรับแอนิเมชันอย่างง่าย คุณปฏิบัติ React Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน React Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน React Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “คอมโพเนนต์ Motion และแอนิเมชันพื้นฐาน” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน React Academy นี้ได้ไหม

ได้ บทเรียน React Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

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