React Academy · บทเรียน

IntersectionObserver สำหรับเอฟเฟกต์ที่ทำงานเมื่อเลื่อน

ใช้ IntersectionObserver ภายใน useEffect เพื่อเรียกใช้แอนิเมชัน การโหลดแบบขี้เกียจ และการเลื่อนแบบไม่สิ้นสุด

บทเรียน 4 จาก 413 ขั้นตอน

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

IntersectionObserver ทำอะไร

API IntersectionObserver ตรวจสอบอย่างมีประสิทธิภาพว่าองค์ประกอบหนึ่งรายการหรือหลายรายการเข้าสู่หรือออกจากพื้นที่แสดงผลของเบราว์เซอร์ (หรือองค์ประกอบบรรพบุรุษที่ระบุ) หรือไม่ ต่างจากตัวรับฟังการเลื่อนที่ทำงานทุกพิกเซล ตัวสังเกตการณ์จะเรียกฟังก์ชันเรียกกลับเฉพาะเมื่อองค์ประกอบข้ามค่าขีดแบ่ง จึงมีประสิทธิภาพมากกว่าสำหรับเอฟเฟกต์ที่อิงตามการเลื่อน

ฟังก์ชันเรียกกลับและรายการของตัวสังเกตการณ์

ฟังก์ชันเรียกกลับจะได้รับอาร์เรย์ของออบเจ็กต์ IntersectionObserverEntry โดยมีหนึ่งรายการต่อองค์ประกอบที่กำลังสังเกต แต่ละรายการมีค่าบูลีน isIntersecting (เป็นจริงเมื่อมองเห็น) และตัวเลข intersectionRatio ระหว่าง 0 ถึง 1 (สัดส่วนขององค์ประกอบที่มองเห็นอยู่ในขณะนั้น) ใช้ค่าเหล่านี้เพื่อกำหนดสถานะการมองเห็น

การสร้างตัวสังเกตการณ์ใน useEffect

สร้างตัวสังเกตการณ์ภายใน useEffect แล้วเรียกใช้ observer.observe(ref.current) เพื่อเริ่มติดตามองค์ประกอบ ต้องผูก ref เข้ากับองค์ประกอบ DOM ที่ต้องการติดตาม สร้างตัวสังเกตการณ์หลังจากติดตั้งคอมโพเนนต์แล้ว เพื่อให้ ref.current มีค่า

การล้างข้อมูล: ยกเลิกการติดตามและตัดการเชื่อมต่อ

ในฟังก์ชันล้างข้อมูลของ useEffect ให้เรียกใช้ observer.unobserve(element) เพื่อหยุดติดตามองค์ประกอบที่ระบุ หรือเรียกใช้ observer.disconnect() เพื่อหยุดการสังเกตทั้งหมด หากลืมล้างข้อมูล ตัวสังเกตการณ์จะยังคงอยู่หลังจากถอดคอมโพเนนต์ออก และอาจทำให้เกิดข้อผิดพลาดหรือการรั่วไหลของหน่วยความจำ

ตัวเลือกค่าขีดแบ่ง

ตัวเลือก threshold ควบคุมเวลาที่ฟังก์ชันเรียกกลับจะทำงาน ค่า 0 จะทำงานทันทีที่มองเห็นพิกเซลใด ๆ ขององค์ประกอบ ส่วนค่า 1 จะทำงานเมื่อมองเห็นองค์ประกอบทั้งหมดเท่านั้น นอกจากนี้ยังส่งอาร์เรย์ เช่น [0, 0.5, 1] เพื่อรับฟังก์ชันเรียกกลับที่ระดับการมองเห็นหลายระดับได้

ตัวเลือก rootMargin

rootMargin ใช้ขยายหรือลดพื้นที่ตัดกันที่มีผล โดยใช้รูปแบบไวยากรณ์คล้าย CSS: '100px 0px' จะทำงานก่อนที่องค์ประกอบจะเข้าสู่พื้นที่แสดงผล 100px ใช้ '-100px' เพื่อให้ทำงานเมื่อองค์ประกอบอยู่ลึกเข้าไปในพื้นที่แสดงผล 100px เท่านั้น วิธีนี้มีประโยชน์สำหรับการโหลดล่วงหน้าหรือการทำภาพเคลื่อนไหวก่อนที่องค์ประกอบจะมองเห็นได้ทั้งหมด

การโหลดรูปภาพเมื่อจำเป็น

หากต้องการโหลดรูปภาพเมื่อจำเป็น ให้กำหนดแอตทริบิวต์ data-src แทน src ในตอนแรก เมื่อระบบสังเกตการณ์ทำงานโดยมีค่า isIntersecting: true ให้คัดลอก data-src ไปยัง src เพื่อเริ่มคำขอเครือข่าย จากนั้นเรียกใช้ observer.unobserve(entry.target) เนื่องจากรูปภาพต้องโหลดเพียงครั้งเดียว

ภาพเคลื่อนไหวที่ทำงานเมื่อเลื่อน

สำหรับภาพเคลื่อนไหวแบบค่อย ๆ ปรากฏ ให้เพิ่มคลาส CSS เมื่อ isIntersecting เปลี่ยนเป็น true: element.classList.add('visible') กำหนดการเปลี่ยนผ่านใน CSS ดังนี้: .card { opacity: 0; transform: translateY(20px); transition: opacity 0.4s, transform 0.4s; } และ .card.visible { opacity: 1; transform: none; } ระบบสังเกตการณ์จะเรียกใช้ตัวกระตุ้นได้อย่างมีประสิทธิภาพ

การวิเคราะห์: การติดตามเนื้อหาที่ดู

IntersectionObserver เหมาะอย่างยิ่งสำหรับการติดตามการมองเห็น เมื่อองค์ประกอบที่มีแอตทริบิวต์ data-analytics-id เข้าสู่พื้นที่มองเห็นตามเกณฑ์ 0.5 ให้ส่งเหตุการณ์การวิเคราะห์ วิธีนี้วัดได้อย่างแม่นยำว่าส่วนใดของเนื้อหาที่ผู้ใช้อ่านจริง และเชื่อถือได้มากกว่าการใช้เปอร์เซ็นต์ความลึกของการเลื่อนแบบง่าย ๆ อย่างมาก

การสังเกตองค์ประกอบหลายรายการ

อินสแตนซ์ IntersectionObserver เดียวสามารถสังเกตองค์ประกอบหลายรายการได้ โดยเรียกใช้ observer.observe(element) กับแต่ละองค์ประกอบ องค์ประกอบที่สังเกตทั้งหมดจะใช้ฟังก์ชันเรียกกลับและตัวเลือกเดียวกัน ภายในฟังก์ชันเรียกกลับ ให้ใช้ entry.target เพื่อระบุว่าองค์ประกอบใดเป็นผู้กระตุ้นการแจ้งเตือน

การสร้างฮุก useInView

ฮุก useInView ที่นำกลับมาใช้ใหม่ได้จะคืนค่า [ref, inView] ให้ผูก ref เข้ากับองค์ประกอบใดก็ได้ แล้วอ่านค่า inView เพื่อทราบว่าองค์ประกอบนั้นกำลังมองเห็นอยู่หรือไม่ ฮุกรับออบเจ็กต์ options สำหรับกำหนด threshold และ rootMargin แนวคิดนามธรรมนี้ทำให้เอฟเฟกต์จากการเลื่อนมีรูปแบบเชิงประกาศในทุกคอมโพเนนต์

เกณฑ์ของ IntersectionObserver

เกณฑ์ของ IntersectionObserver ที่เป็น 0 หมายความว่าอย่างไร

สรุปบทเรียน: IntersectionObserver

IntersectionObserver ติดตามการมองเห็นขององค์ประกอบได้อย่างมีประสิทธิภาพโดยใช้ isIntersecting และ intersectionRatio ควรล้างการสังเกตเสมอด้วย unobserve หรือ disconnect ใช้ threshold เพื่อควบคุมจุดกระตุ้น และใช้ rootMargin เพื่อขยายพื้นที่ตรวจจับ นำไปใช้กับการโหลดเมื่อจำเป็น ภาพเคลื่อนไหว และการติดตามการวิเคราะห์

เริ่มต้นได้ฟรี

เรียนรู้ React ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
88
บทเรียน
324

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

บทเรียน “IntersectionObserver สำหรับเอฟเฟกต์ที่ทำงานเมื่อเลื่อน” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “IntersectionObserver สำหรับเอฟเฟกต์ที่ทำงานเมื่อเลื่อน”

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

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

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

บทเรียน “IntersectionObserver สำหรับเอฟเฟกต์ที่ทำงานเมื่อเลื่อน” ใช้เวลานานแค่ไหน

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

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

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

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

  1. Clipboard API: การคัดลอกและวางใน React
  2. Geolocation API ในคอมโพเนนต์ React
  3. Notifications API และการจัดการสิทธิ์
  4. IntersectionObserver สำหรับเอฟเฟกต์ที่ทำงานเมื่อเลื่อน
← กลับไปที่ React Academy