ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 무한 스크롤(Infinite Scroll)
    Note 2021. 7. 26. 20:45

    많은 데이터를 한 화면에 전부 보여줄 수 없는 경우에 무한 스크롤, 페이지네이션이 사용된다.

     

    무한 스크롤

    - 한 페이지를 아래로 스크롤 하면 끝없이 새로운 화면을 보여준다.

    - 화면이 작은 모바일에 적합하다.

     

    페이지네이션

    - 콘텐츠를 여러 개의 페이지로 나누어 보여준다.

    - 상대적으로 PC에 적합하다.

     

    무한 스크롤

    무한 스크롤을 구현하는 방법은 여러 가지가 있겠지만 페이지 맨 마지막 요소에 도달하면 다음 데이터를 불러오는 방식이 있는데,

     

    scroll eventIntersectionObserver을 사용하여 구현할 수 있다.

     

    scroll event

    scroll event는 보통 document에 스크롤 이벤트를 등록하고, 특정 지점(스크롤 최하단)을 관찰하며 엘리먼트가 위치에 도달했을 때 실행할 콜백함수를 등록하는 방식으로 무한 스크롤을 구현한다. 

     

    하지만 이 방식은 코드들이 모두 메인 스레드에서 실행되고 사용자가 조금만 스크롤을 움직여도 수백 번, 수천번 호출될 수 있어 성능에 안 좋은 영향을 미칠 수 있어 throttle를 이용한 최적화를 시키는 것이 일반적인 방법이었다.

     

    throttle

    여러 번 발생하는 이벤트를 일정 시간 동안, 한 번만 실행되도록 만드는 개념

    scroll event와 같이 잦은 이벤트를 막아 성능상의 유리함을 가져올 수 있다.

     


    Intersection Observer

    Intersection Observer의 등장으로 위와 같은 문제를 해결할 수 있게 되었다. MDN에서는 IntersectionObserver를 아래와 같이 정의하고 있다.

    Intersection Observer API는 대상 요소가 상위 요소 또는 최상위 문서의 뷰포트와 교차하는 변경 사항을 비동기식으로 관찰하는 방법을 제공합니다 .

     

    IntersectionObserver는 요소의 가시성을 관찰할 수 있고, 해당 요소의 가시성에 대한 변화가 일어날 때마다 우리가 설정한 콜백함수를 실행시켜준다. 이 경우에는 웹 사이트는 요소의 교차를 파악하기 위해 메인 스레드를 사용할 필요가 없어지므로 성능상의 유리함을 가져올 수 있다.

    let options = {
    root: document.querySelector('#scrollArea'),
    rootMargin: '0px',
    threshold: 1.0
    }
    let observer = new IntersectionObserver(callback, options);

    출처: https://im-developer.tistory.com/196 [Code Playground]

     

    Intersection Observer API는 위와 같이 callback 함수와 옵션 객체를 인자로 받는다.

     

    • Callback: target이라고 불리는 특정 요소가 device의 viewport나 특정 요소(옵션의 root)에 교차되었을때 callback 함수가 실행된다.
    • options:
      • root: target의 visibility를 검사하기 위한 viewport로 사용될 요소로 target의 상위 요소여야만 한다. 
        • 기본값: browser viewport (아무 값도 설정하지 않거나 null로 설정할 경우 browser viewport를 기본값으로 한다.)
      • rootMargin: root 주변의 margin을 말하며, CSS의 margin 속성과 비슷하게 "10px 20px 30px 40px" (top, right, bottom, left)로 줄 수 있다. %값으로도 줄 수 있으며 이 값에 의해 root 요소의 박스 모델을 기준으로 범위가 늘어나거나 줄어들거나 한다.
        • 기본값: 0px
      • threshold: 단일 숫자이거나 숫자가 든 배열을 지정할 수 있다. target 요소와 root 간의 intersection 비율을 말한다. (target 요소가 얼마나 보여지는지 0 ~ 1의 비율로 나타낸 값)
        • 만약 50% 정도만 교차되었을 때 콜백 함수를 실행시키고 싶다면 0.5를 지정하면 된다.
        • 0은 1 px이라도 보여지면 콜백을 실행시킨다는 뜻이고, 1은 모든 px이 전부 화면에 보여져야만 콜백을 실행시킨다는 뜻이다.
        • 기본값: 0

     

    'Note' 카테고리의 다른 글

    반응형 테이블(Responsive Table)  (0) 2021.08.06
    페이지네이션(Pagination)  (0) 2021.08.02
    DNS_PROBE_FINISHED_NXDOMAIN  (0) 2021.05.02
    Input type="date"  (0) 2021.04.28
    Reflow, Repaint  (0) 2021.04.23

    댓글