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

คอมโพเนนต์แบบแอนิเมชันและการอินเทอร์โพเลตสไตล์

ใช้ค่าแบบสปริงกับ animated.div และองค์ประกอบอื่น ๆ พร้อมอินเทอร์โพเลตค่าเพื่อคำนวณสไตล์ซับซ้อน

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

ส่วนแทนที่แบบใช้ได้ทันทีของ animated.*

รีแอกต์สปริงมีคอมโพเนนต์ HTML แบบเคลื่อนไหวให้ใช้งานกับองค์ประกอบ HTML ทั้งหมด เช่น animated.div, animated.span, animated.img, animated.button และอื่น ๆ คอมโพเนนต์เหล่านี้เป็นส่วนแทนที่โดยตรงขององค์ประกอบดั้งเดิม โดยมีความแตกต่างสำคัญประการหนึ่งคือ สามารถรับออบเจ็กต์ SpringValue เป็นพร็อพสไตล์ได้

เหตุใดจึงใช้สปริงได้เฉพาะกับ animated.*

องค์ประกอบรีแอกต์ทั่วไปจะรับสไตล์เป็นออบเจ็กต์ธรรมดาที่มีค่าคงที่ ส่วน SpringValues เป็นออบเจ็กต์พิเศษที่อัปเดตในทุกเฟรมของแอนิเมชันโดยไม่ผ่านรอบการเรนเดอร์ซ้ำของรีแอกต์ มีเพียงคอมโพเนนต์ animated.* เท่านั้นที่รู้วิธีสมัครรับการอัปเดตของ SpringValue และเปลี่ยนแปลงสไตล์ของ DOM โดยตรง โดยข้ามรีแอกต์ไปทั้งหมดเพื่อประสิทธิภาพสูงสุด

การใช้สไตล์สปริงเบื้องต้น

นำค่าสปริงไปใช้โดยตรงเป็นพร็อพสไตล์ CSS บนคอมโพเนนต์แบบเคลื่อนไหว ตัวอย่างเช่น: style={{ opacity: opacity, transform: transform }} โดยที่ opacity และ transform เป็น SpringValues จาก useSpring animated.div จะอ่านค่าเหล่านี้ในทุกจังหวะของ RAF (requestAnimationFrame) และนำไปใช้กับโหนด DOM

เมธอดการแปลงค่า .to()

SpringValues มีเมธอด .to() สำหรับแปลงผลลัพธ์ของค่า กรณีใช้งานที่พบบ่อยคือการแปลงค่าสปริงตัวเลขให้เป็นสตริง CSS: x.to(v => "translateX(" + v + "px)") ฟังก์ชันจะรับค่าตัวเลขปัจจุบันและส่งคืนผลลัพธ์ที่แปลงแล้ว ซึ่งจะถูกนำไปใช้เป็นสไตล์

การแปลงค่าระหว่างช่วง

เมธอด .to() ยังรับอินพุตแบบอาร์เรย์สำหรับการแมปช่วงได้ด้วย: x.to([0, 1], ["#ff0000", "#00ff00"]) ซึ่งจะแมปค่าสปริงจากช่วง [0, 1] ไปยังช่วงสีจากแดงเป็นเขียว วิธีนี้ใช้แปลงค่าสปริงตัวเลขให้เป็นสี สตริง หรือค่าใด ๆ ที่ไม่สามารถแทนด้วยตัวเลขธรรมดาได้

การแปลงค่าการเปลี่ยนรูปด้วยหลายค่า

เมื่อสปริงติดตามหลายค่าพร้อมกัน คุณสามารถแปลงค่าเหล่านั้นร่วมกันได้ สำหรับสปริงที่ติดตาม { x, y } คุณสามารถเขียนได้ดังนี้: x.to((xVal, yVal) => "translate(" + xVal + "px," + yVal + "px)") ฟังก์ชันเรียกกลับของ .to() จะรับค่าทั้งหมดตามลำดับที่ปรากฏในค่ากำหนดของสปริง

การสร้างคอมโพเนนต์แบบกำหนดเองที่เคลื่อนไหวได้

คุณสามารถห่อคอมโพเนนต์ของคุณเองด้วย animated() ได้: const AnimatedCard = animated(Card) คอมโพเนนต์ที่ถูกห่อต้องรองรับพร็อพ style และส่งต่อพร็อพนั้นไปยังองค์ประกอบ DOM ตอนนี้ AnimatedCard สามารถรับ SpringValues ในพร็อพสไตล์ได้เช่นเดียวกับ animated.div

การประกอบสปริงหลายตัว

แอนิเมชันที่ซับซ้อนมักรวมสปริงหลายตัวเข้าด้วยกัน ตัวอย่างเช่น แอนิเมชันการปรากฏอาจใช้สปริงหนึ่งตัวสำหรับความทึบ และอีกตัวสำหรับตำแหน่งแนวตั้ง คุณสามารถนำทั้งสองค่าไปใช้กับ animated.div เดียวกันได้: style={{ opacity: opacitySpring.opacity, transform: positionSpring.y.to(y => "translateY(" + y + "px)") }}

ประสิทธิภาพ: การข้ามการเรนเดอร์ซ้ำของ React

คุณลักษณะด้านประสิทธิภาพที่สำคัญที่สุดของรีแอกต์สปริงคือ การอัปเดตค่าแบบเคลื่อนไหวจะข้ามตัวประสานของรีแอกต์ เมื่อสปริงกำลังแอนิเมชัน รีแอกต์จะ NOT เรนเดอร์คอมโพเนนต์ซ้ำในทุกเฟรม แต่คอมโพเนนต์ animated.* จะอัปเดตคุณสมบัติสไตล์ของโหนด DOM โดยตรงในฟังก์ชันเรียกกลับของ requestAnimationFrame แต่ละรอบ ทำให้สร้างแอนิเมชัน 60fps ได้โดยไม่ต้องรับภาระจากรีแอกต์

การแปลงค่าเป็นความทึบและมาตราส่วน

รูปแบบแอนิเมชันทั่วไปที่ใช้การแปลงค่า ได้แก่ แสดงแบบจางเข้าตอนเมาท์ด้วย opacity.to([0, 1], [0, 1]) ขยายเมื่อวางเมาส์เหนือด้วย scale.to(s => "scale(" + s + ")") และหมุนเมื่อสลับสถานะด้วย rotation.to(r => "rotate(" + r + "deg)") การเชื่อมการเปลี่ยนรูปเหล่านี้เข้าด้วยกันจะสร้างเอฟเฟกต์แบบผสม

การจำกัดค่าและการคาดคะเนนอกช่วง

โดยค่าเริ่มต้น .to() ที่ใช้อาร์เรย์ช่วงสามารถคาดคะเนนอกเหนือจากช่วงที่กำหนดได้ คุณสามารถควบคุมสิ่งนี้ด้วยตัวเลือก extrapolate: x.to({ range: [0, 1], output: [0, 100], extrapolate: "clamp" }) ซึ่งจะป้องกันไม่ให้ผลลัพธ์ต่ำกว่า 0 หรือสูงกว่า 100 แม้สปริงจะเคลื่อนเลยเป้าหมายก็ตาม วิธีนี้มีประโยชน์สำหรับแถบความคืบหน้าและแอนิเมชันที่มีขอบเขต

ข้อกำหนดของคอมโพเนนต์ animated.*

เหตุใดจึงต้องใช้ animated.div แทน div ธรรมดาเมื่อนำค่าสปริงไปใช้

ทบทวนบทเรียน: คอมโพเนนต์แบบเคลื่อนไหว

animated.div, animated.span และ animated(CustomComponent) เป็นส่วนแทนที่แบบใช้ได้ทันทีที่รองรับ SpringValues เป็นพร็อพสไตล์ เมธอด .to() จะแปลงค่าสปริงเป็นสตริง CSS ช่วงสี หรือรูปแบบผลลัพธ์ใด ๆ สปริงหลายตัวสามารถประกอบกันบนองค์ประกอบเดียวได้อย่างเป็นธรรมชาติ ประโยชน์ด้านประสิทธิภาพที่สำคัญคือ การอัปเดตสปริงจะข้ามการเรนเดอร์ซ้ำของรีแอกต์ด้วยการเปลี่ยนแปลงสไตล์ DOM โดยตรงในฟังก์ชันเรียกกลับของ RAF

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

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

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

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

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

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

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

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

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

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

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

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

  1. พื้นฐาน React Spring: ฮุก useSpring
  2. คอมโพเนนต์แบบแอนิเมชันและการอินเทอร์โพเลตสไตล์
  3. useTrail และ useChain สำหรับลำดับแอนิเมชัน
  4. แอนิเมชันที่ขับเคลื่อนด้วยท่าทางด้วย use-gesture
← กลับไปที่ React Academy