Intersection Observer API 기본 개념


실무에서 Infinite Scroll Pagination 을 Intersection Observer API 를 통해 구현 했었는데 따로 정리하지 않아서 이번에 간단하게 정리해보려고 한다.

정의

Intersection Observer API는 타겟 요소와 상위 요소 또는 최상위 document 의 viewport  사이의 intersection 내의 변화를 비동기적으로 관찰하는 방법입니다. mdn docs 中
 
즉, 특정 화면(기본값은 브라우저 화면)을 기준으로 타겟 요소가 보이는 경우를 비동기적으로 체크할 수 있다는 의미이다.

대표적 사용 유형

  • 스크롤 값에 따른 이미지 지연 로딩
  • infinite scroll 을 통한 pagination 처리 (data fetching)
  • 스크롤 값에 따른 애니메이션 효과

기본 구조

IntersectionObserver

  • callback: 콜백 함수
    • entries: 인스턴스 배열
      • boundingClientRect: 타겟 요소의 크기, 위치 정보
      • intersectionRatio: 타겟 요소가 루트 요소와 교차한 영역 수치 (options - threshold 값과 근접함)
      • intersectionRect: 루트 요소에 교차한 영역 정보
      • isIntersecting: 타겟 요소가 루트 요소에 관찰되는지 여부
      • rootBounds: 루트 요소의 크기, 위치 정보
      • target: 타겟 요소
      • time: entries 값의 변경이 발생한 시간
  • observer: IntersectionObserver 를 통해 생성된 인스턴스

options

  • root: 범위의 기준이 되는 요소 (루트 요소)
  • rootMargin: 루트 요소에 대한 범위 변경 (양수 → 넓어짐, 음수 → 좁아짐)
    • css 의 margin 속성과 유사 (top, right, bottom, left 순)
  • threshold: 타켓이 보이는 시점부터 설정한 퍼센트마다 콜백을 실행해준다.
    • 0 부터 1 까지 적용 가능 (0.3 → 30%, 1 → 100%)
    • 숫자 또는 배열값을 적용할 수 있음 ([0.01, 0.5, 1.0])

instance

  • instance.observe(target)
    • 타겟 관찰을 시작(재개) 한다.
  • instance.unobserve(target)
    • 타겟 관찰을 중지한다.
  • instance.disconnect()
    • 인스턴스가 관찰하는 모든 타겟의 관찰을 중지한다.

간단한 예제

위에서 작성한 사용 유형에 대해 예제를 만들어봤다.

이미지 lazy loading

Infinite Scroll 을 통한 Pagination

Scroll Animation

 

 
참고