스크롤에 따른 효과를 어떻게 줄 수 있을까?
작업업을 하다 보면 스크롤할 때 현재 화면에 어떤 요소가 보이는지 확인하고 싶을 때가 있다.
이런 기능은 아래와 같이 화면에 보이기 시작할 때 특정 위치에서 보여주거나 어떤한 효과를 주고 싶을 때 특히 유용하다.

직접 계산하는 방법
현재 창의 스크롤 위치와 요소의 위치, 크기를 계산하여 요소가 뷰포트에 보이는지를 확인하는 방법도 있습니다. 하지만 이러한 방법은 리플로우를 발생시켜 성능에 영향을 줄 수 있다.
Intersection Observer API
따라서 자바스크립트에서는 이러한 기능을 쉽게 구현하기 위한 Intersection Observer API가 있다.
이 API는 메인 스레드에 영향을 주지 않으며 비동기적으로 동작하기 때문에 성능이 더욱 효율적입니다.
또한스크롤 이벤트나 리사이즈 이벤트를 사용하지 않고도 요소가 화면에 얼마나 보이는지를 추적할 수 있다.
Intersection Observer API는 뷰포트(화면)에 요소가 들어왔는지 나갔는지를 비동기적으로 감지하는 자바스크립트 기능. 이 API는 스크롤 이벤트나 리사이즈 이벤트를 사용하지 않고도 요소가 화면에 얼마나 보이는지를 추적할 수 있게 해준다.
IntersectionObserver 객체를 생성할 때 콜백 함수를 첫 번째 인수로 전달.
이 콜백 함수는 관찰 중인 요소의 가시성 변화가 발생할 때마다 호출 됨
const io = new IntersectionObserver(function(entries) {
entries.forEach(function(entry) {
if (!entry.isIntersecting) {
return;
}
console.log(entry.isIntersecting, entry.target);
});
});
관찰할 요소들을 선택하고 관찰을 시작
const h1Els = document.querySelectorAll('h1');
h1Els.forEach(function(el) {
io.observe(el);
});
마무리
Intersection Observer API는 스크롤에 따른 다양한 효과를 성능 저하 없이 구현할 수 있는 효율적인 방법입니다.
이 API를 사용하면 레이지 로딩(Lazy Loading), 무한 스크롤(Infinite Scroll), 광고 노출 추적, 애니메이션 트리거 등 다양한 스크롤 관련 기능을 쉽게 구현할 수 있습니다.
IE, Opera Mini 를 제외한 대부분의 현대적인 브라우저에서 지원하므로, IE를 지원하지 않아도 된다면 API를 활용해보면 좋을 거 같다.
-끝-
'Vanilla JS' 카테고리의 다른 글
[Vanilla JS] <script type=module> 사용 시 CORS 에러 원인과 해결 방안 (0) | 2024.07.17 |
---|