본문 바로가기
javascript

IntersectionObserver 이용한 인피니티 스크롤 예제

by hjcode 2020. 4. 3.

IntersectionObserver는 대상 요소와 뷰포트의 교차 영역에 대한 변화를 비동기적으로 감지하도록 도와줍니다.

비동기로 실행되기 때문에 scroll 이벤트 요소에서 발생하는 이벤트가 연속으로 호출되는 문제가 없습니다.

 

const io = new IntersectionObserver(callback, options) 
io.observe(element) // 대상 요소 감시 시작

 

const io = new IntersectionObserver(entries => {
	if (entries[0].intersectionRatio <= 0) return;
	console.log('Loaded new items');
});

io.observe(document.querySelector('.target')); // 관찰 시작

entries는 다음의 속성들이 있습니다.

 

  • boundingCliendRect: 타겟의 정보
  • intersectionRect: 타겟의 교차 영역 정보
  • intersectionRatio: 타겟의 교차한 영역 비율(Number)
  • isIntersecting: 타겟의 교차 상태(Boolean)
  • rootBounds: 루트 요소의 정보
  • target: 타겟 요소
  • time: 변경 발생 시간

예제

const ele = document.querySelector('.scroll');

const io = new IntersectionObserver(entries => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      add();
    }
  });
});
io.observe(ele);

function add() {
	const $div = document.createElement("div");
	ele.before($div)
}

jsfiddle에서 보기

https://jsfiddle.net/hyuckjin/3yswdjrb/

 

Intersection Observer infiniteScroll - JSFiddle - Code Playground

 

jsfiddle.net

IE도 지원이 되도록 하는 라이브러리도 있습니다.

https://www.npmjs.com/package/intersection-observer

 

intersection-observer

A polyfill for IntersectionObserver

www.npmjs.com

References

https://developer.mozilla.org/ko/docs/Web/API/IntersectionObserver

 

IntersectionObserver

viewport

developer.mozilla.org

 

반응형

'javascript' 카테고리의 다른 글

pushState  (0) 2020.05.22
es6로 0부터 n까지 숫자범위 배열 생성  (0) 2020.05.12
getBoundingClientRect  (0) 2020.03.23
프로그래머스 레벨1 완주하지 못한 선수  (0) 2020.03.17
프로그래머스 레벨1 김서방 찾기  (0) 2020.03.13