แอนิเมชั่นอย่างง่ายโดยใช้ผู้สังเกตการณ์ทางแยก

Nov 28 2022
คุณมีแอนิเมชั่นในเว็บไซต์ของคุณ แต่ปัญหาคือเมื่อคุณเลื่อนไปที่ส่วนนั้น แอนิเมชั่นของคุณก็เสร็จแล้ว แน่นอนว่าคุณต้องการให้ผู้ใช้เห็นภาพเคลื่อนไหวของคุณ ดังนั้นคุณจะทำอย่างไรให้ภาพเคลื่อนไหวล่าช้าจนกว่าวิวพอร์ตจะมองเห็นได้ ในบทความนี้ฉันจะแสดงให้คุณเห็นวิธีหนึ่งในการทำโดยใช้ Intersection Observer API

คุณมีแอนิเมชั่นในเว็บไซต์ของคุณ แต่ปัญหาคือเมื่อคุณเลื่อนไปที่ส่วนนั้น แอนิเมชั่นของคุณก็เสร็จแล้ว แน่นอนว่าคุณต้องการให้ผู้ใช้เห็นภาพเคลื่อนไหวของคุณ ดังนั้นคุณจะทำอย่างไรให้ภาพเคลื่อนไหวล่าช้าจนกว่าวิวพอร์ตจะมองเห็นได้

ในบทความนี้ฉันจะแสดงให้คุณเห็นวิธีหนึ่งในการทำโดยใช้ Intersection Observer API

ฉันสร้างองค์ประกอบ div ด้วยชื่อคลาส "demo"

<div class="demo"><div>
 

.demo{
  width: 100vw;
  height: 200px;
  background: orange;
  top: 100vh;
  left: 0vw;
  position: relative;
} 

@keyframes left-right 
{
  0% {left: -90vw;}j
  100% {left: 0px;}

.left-right 
{
 animation-name: left-right;
 animation-duration: 2s;
 animation-iteration-count: 1;
}

// create observer
const observer = new IntersectionObserver(entries => {
  // Loop over the entries(even if we only asks one element to observe)
   entries.forEach(entry => {
   
      // If the element is visible
    if (entry.isIntersecting) {
      entry.target.classList.add('left-right');
	  return; // if we added the class, exit the function
    }

    // We're not intersecting, so remove the class!
   entry.target.classList.remove('left-right');
  });
});

//tell observer to track the element
observer.observe(document.querySelector('.demo'))

“entry.target.classList.remove('left-right');” บรรทัดลบคลาสภาพเคลื่อนไหว .left-right เมื่อใดก็ตามที่องค์ประกอบ div ไม่ปรากฏในหน้าจอ จำการตั้งค่าแอนิเมชันของเราที่ 0% ที่เราตั้งค่า -90vh เพื่อให้มองเห็นได้ 10vh หรือไม่ สาเหตุที่เป็นเช่นนั้น ฟังก์ชันจาวาสคริปต์จะยังคงเห็นองค์ประกอบ div และคลาส .left-right จะไม่ถูกลบออกในขณะที่ภาพเคลื่อนไหวกำลังดำเนินการอยู่ หากคลาสแอนิเมชัน .left-right จะทำให้องค์ประกอบไม่สามารถมองเห็นได้ในหน้าจอในบางจุด มันจะให้ผลลัพธ์ที่แตกต่างออกไปเมื่อเรียกใช้ฟังก์ชัน สคริปต์ js จะไม่เห็นมันบนหน้าจอ ดังนั้นจะลบคลาสออก จากนั้นองค์ประกอบ div จะมีตำแหน่งเดิมกลับมา ซ้าย: 0vh ซึ่งมองเห็นได้ จากนั้นจะเรียกใช้ฟังก์ชันอีกครั้งและเพิ่มภาพเคลื่อนไหว จากนั้นจะมองไม่เห็นอีกครั้งเนื่องจากตำแหน่งเริ่มต้นของภาพเคลื่อนไหว คลาสจะถูกลบและเพิ่มครั้งแล้วครั้งเล่า คุณจะไม่เห็นกระบวนการแอนิเมชันอย่างที่คุณคาดหวัง คุณสามารถลบบรรทัด “entry.target.classList.remove('left-right');” หากคุณต้องการให้แอนิเมชั่นทำงานเพียงครั้งเดียว ก็ไม่เป็นไรหากคลาสที่มีแอนิเมชั่นของคุณจะทำให้มองไม่เห็นองค์ประกอบในบางจุด

นี่เป็นเพียงวิธีหนึ่งของแอนิเมชั่นตามตำแหน่ง/การมองเห็น การมีแอนิเมชั่นบนเว็บไซต์ของคุณดึงดูดและทำให้ผู้ชมอยู่ได้นานขึ้น