Intersection Observer API는 스크롤 이벤트를 효율적으로 처리해 성능 저하 없이 부드러운 애니메이션을 구현할 수 있는 강력한 도구입니다. 기존 scroll
이벤트의 단점을 보완하며, 특정 요소가 화면에 등장할 때만 애니메이션을 실행하도록 최적화할 수 있어 웹 페이지 체류 시간 향상에 효과적입니다.
Intersection Observer란 무엇인가?
웹 개발에서 스크롤 이벤트는 자주 사용되지만, 많은 요소를 동시에 감지할 경우 성능 저하 문제가 발생합니다.Intersection Observer
는 이러한 문제를 해결하기 위해 등장했으며, 브라우저가 DOM 요소의 가시성 변화를 관찰하고 콜백을 실행하도록 도와줍니다.
주요 특징
- 스크롤 이벤트보다 성능 최적화에 유리
- 뷰포트 진입·이탈을 쉽게 감지
- 지연 로딩, 스크롤 애니메이션, 인피니트 스크롤 등에 활용 가능
기본 예제 – 간단한 감지 코드
다음은 특정 요소가 화면에 등장했을 때 메시지를 출력하는 가장 기본적인 예제입니다.
<div class="box">관찰 대상 박스</div>
<script>
const target = document.querySelector('.box');
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
console.log('박스가 화면에 나타났습니다!');
}
});
});
observer.observe(target);
</script>
HTML코드 설명
new IntersectionObserver(callback)
: 감시자 객체 생성observer.observe(target)
: 대상 요소 등록entry.isIntersecting
: 요소가 뷰포트 안에 있는지 여부 확인
실전 예제 – 스크롤 시 페이드인 애니메이션
스크롤 위치에 따라 특정 요소가 부드럽게 나타나도록 구현해봅시다.
HTML
<section class="fade-section">
<div class="fade-item">첫 번째 아이템</div>
<div class="fade-item">두 번째 아이템</div>
<div class="fade-item">세 번째 아이템</div>
</section>
HTMLCSS
.fade-item {
opacity: 0;
transform: translateY(30px);
transition: all 0.6s ease-out;
}
.fade-item.show {
opacity: 1;
transform: translateY(0);
}
CSSJavaScript
const fadeItems = document.querySelectorAll('.fade-item');
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.classList.add('show');
// 한 번만 실행하고 싶다면 아래 코드 추가
observer.unobserve(entry.target);
}
});
}, {
threshold: 0.2 // 요소의 20%가 보이면 실행
});
fadeItems.forEach(item => observer.observe(item));
JavaScript성능 최적화를 위한 팁
- threshold 조절
0.1
: 요소가 살짝 보일 때 즉시 실행1.0
: 요소가 완전히 보여야 실행- 불필요한 애니메이션 남발을 막기 위해 0.2~0.4 권장
- unobserve 사용
observer.unobserve(entry.target)
- 한 번만 실행되는 애니메이션은 성능 낭비 방지
- CSS Transition 또는 GSAP 혼합 사용
- 간단한 효과 → CSS Transition
- 복잡한 효과 → GSAP 등 JS 라이브러리
- 다양한 활용 사례
- 이미지 지연 로딩(Lazy Loading)
- 스크롤 인디케이터
- 무한 스크롤(Infinite Scroll)
마무리
Intersection Observer는 스크롤 이벤트를 대체하면서 성능과 유지보수성을 모두 개선할 수 있는 강력한 API입니다.
특히 이미지 지연 로딩, 스크롤 애니메이션, 무한 스크롤 구현 시 유용하므로, 프로젝트에서 적극적으로 활용해 보시기 바랍니다.
Summary in English
Learn how to create smooth, performance-optimized scroll animations using the Intersection Observer API. Improve your website speed and user experience by triggering animations only when elements appear in the viewport.
- 👉 CSS와 JS로 완성하는 반응형 UI 구현 가이드|실무 예시 모음집
- 🚀 쿠팡에서 맥북에어 구매하고, UI 개발자 커리어 시작하기!
- 🚀 아이폰17, 쿠팡에서 스마트하게 시작하세요.
“이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.”
대표 사진: Unsplash의Arif Riyanto