Intersection Observer API는 대상 요소와 상위 요소 또는 뷰포트의 교차점 변화를 관찰하도록 설계된 최신 웹 API입니다. 이는 요소와 상위 요소 또는 최상위 문서의 뷰포트 교차점에서 변경 사항을 비동기적으로 관찰하는 방법을 제공합니다. 이는 이미지 지연 로딩, 무한 스크롤 또는 요소가 표시될 때 애니메이션 트리거를 구현하는 데 특히 유용할 수 있습니다.
Intersection Observer를 생성하려면 새로운 IntersectionObserver 개체를 인스턴스화하고 콜백 함수와 옵션 개체를 전달해야 합니다. 기본 구문은 다음과 같습니다.
let observer = new IntersectionObserver(callback, options);
콜백 함수는 두 가지 인수, 즉 IntersectionObserverEntry 개체 배열과 관찰자 자체를 사용합니다.
function callback(entries, observer) { entries.forEach(entry => { // Handle each intersection change }); }
옵션 개체는 다음과 같은 속성을 가질 수 있습니다.
Intersection Observer API의 일반적인 사용 사례 중 하나는 이미지 지연 로딩입니다. 이미지는 뷰포트에 들어올 때만 로드되므로 초기 로드 시간이 줄어들고 대역폭이 절약됩니다.
<img data-src="image.jpg" alt="Lazy Loaded Image">
document.addEventListener("DOMContentLoaded", function() { let lazyImages = document.querySelectorAll('img[data-src]'); let observer = new IntersectionObserver((entries, observer) => { entries.forEach(entry => { if (entry.isIntersecting) { let img = entry.target; img.src = img.getAttribute('data-src'); img.removeAttribute('data-src'); observer.unobserve(img); } }); }); lazyImages.forEach(img => { observer.observe(img); }); });
또 다른 사용 사례는 사용자가 페이지 하단 근처로 스크롤할 때 더 많은 콘텐츠가 로드되는 무한 스크롤을 구현하는 것입니다.
<div class="content"></div> <div class="loader">Loading...</div>
let content = document.querySelector('.content'); let loader = document.querySelector('.loader'); let observer = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { loadMoreContent(); } }); }, { root: null, rootMargin: '0px', threshold: 1.0 }); observer.observe(loader); function loadMoreContent() { // Fetch and append new content to the content div }
Intersection Observer API를 사용하여 요소가 시야에 들어올 때 애니메이션을 트리거할 수도 있습니다.
<div class="animate-on-scroll">Animate me!</div>
let animateElements = document.querySelectorAll('.animate-on-scroll'); let observer = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { entry.target.classList.add('animated'); } else { entry.target.classList.remove('animated'); } }); }, { root: null, rootMargin: '0px', threshold: 0.5 }); animateElements.forEach(el => { observer.observe(el); });
여러 임계값을 지정하여 다양한 가시성 수준에서 콜백을 트리거할 수 있습니다.
let options = { root: null, rootMargin: '0px', threshold: [0, 0.25, 0.5, 0.75, 1] };
다양한 조건에 따라 루트 여백을 동적으로 조정할 수 있습니다.
let options = { root: null, rootMargin: calculateRootMargin(), threshold: 0 }; function calculateRootMargin() { // Calculate and return root margin based on conditions }
Intersection Observer API는 웹페이지 요소의 가시성 변경을 처리하는 강력하고 효율적인 방법을 제공합니다. 사용자 정의 가능한 임계값과 루트 마진을 통해 세분화된 제어를 제공하며 비동기식 특성으로 인해 기본 스레드를 차단하지 않습니다. 개발자는 이 API를 활용하여 지연 로딩, 무한 스크롤, 스크롤 애니메이션과 같은 기능을 구현하여 사용자 경험과 성능을 향상할 수 있습니다.
위 내용은 Intersection Observer API 이해하기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!