
IntersectionObserver로 애니메이션을 구현하려는 타겟이 화면에 들어오면 애니메이션을 실행합니다.
IntersectionObserver가 등장하기 이전에는 scroll event를 사용하여 브라우저나 html 요소의 높이를 측정하여 설정한 높이에 따라 애니메이션을 실행할 수 있게 구현하였다고 합니다. 하지만 실행 환경에 따른 높이가 다르고, 호환성의 문제도 있으며, scroll event의 경우 스크롤을 움직일 때마다 픽셀 단위로 변화를 감지하기 때문에 엄청난 요청을 보내게 됩니다.
const showRef = useRef<HTMLDivElement>(null);
const observer = new IntersectionObserver(() => {});
useEffect(() => {
if (showRef.current !== null) {
observer.observe(showRef.current);
}
}, [showRef.current]);
const observer = new IntersectionObserver((entries) => {
const target = entries[0].target as HTMLElement;
if (entries[0].isIntersecting) {
target.style.opacity = '1';
target.style.transform = 'translateY(-10px)';
} else {
target.style.opacity = '0';
target.style.transform = 'translateY(10px)';
}
});