[JS] Infinite Scroll 플러그인
작업물 •
스크롤을 움직이거나 버튼을 클릭하면 다음 / 이전 페이지의 내용을 불러오는 플러그인입니다.
설치
CDN
다운로드
infiniteScroll.min.js - 압축된 js
infiniteScroll.js - 원본 js
시작하기
JS 파일 삽입
cdn을 사용하시면 cdn 경로를, 본인이 js 파일을 업로드해 사용하신다면 해당 경로를 script 태그에 넣어서 사이트에 삽입해주세요.
기본적인 HTML 구조
해당 플러그인은 다음 페이지의 내용을 컨테이너에 계속 추가해가는 방식으로 작동합니다.
대상이 되는 요소만 있는 컨테이너를 만드시는 걸 추천합니다.
초기 내용 설정
기본적으로 플러그인을 사용하기 위해선 container, item, next 세 가지 옵션이 필요합니다.
item : 다음 페이지에서 불러올 요소
container : item이 추가될 요소
next : 다음 페이지의 링크를 담은 a 태그 (href 필요)
css 선택자를 이용해 추가하시면 됩니다.
기능
prev : (HTML 요소) next와 같습니다만, 이전 페이지의 링크를 담은 a 태그
nextButton : (HTML 요소) 추가하시면 다음 페이지를 자동으로 불러오지 않고 버튼을 클릭해야 불러옵니다.
prevButton : (HTML 요소) 추가하시면 이전 페이지를 자동으로 불러오지 않고 버튼을 클릭해야 불러옵니다.
nextLoader : (HTML 요소) 추가하시면 다음 페이지를 로딩하는 중에 해당 요소에 "reveal"이란 class를 추가합니다.
prevLoader : (HTML 요소) 추가하시면 이전 페이지를 로딩하는 중에 해당 요소에 "reveal"이란 class를 추가합니다.
pushHistory : (Boolean, 기본값 : false) 참이면 다음 페이지를 불러오면 주소창의 주소를 해당 페이지의 주소로 변경합니다.
autoPrev : (Boolean, 기본값 : false) 참이면 이전 페이지를 불러올 때 첫 페이지까지 멈추지 않고 불러옵니다.
detectLoad : (Boolean, 기본값 : true) 참이면 다음 / 이전 페이지를 불러왔을 때 해당 페이지의 아이템에 포함된 이미지를 모두 불러오기 전까진 로딩 중이라 처리합니다.
nextCallback : (함수) 다음 페이지를 불러왔을 때 실행되는 콜백입니다. 각각 아이템에 개별적으로 실행되는 콜백입니다. 매개변수를 하나 추가하시면 아이템에 접근하실 수 있습니다.
prevCallback : (함수) 이전 페이지를 불러왔을 때 실행되는 콜백입니다. 각각 아이템에 개별적으로 실행되는 콜백입니다. 매개변수를 하나 추가하시면 아이템에 접근하실 수 있습니다.
간단한 콜백 예시입니다.
function() 혹은 () => 로 반드시 감싸주셔야 합니다.
Masonry와 함께 이용하실 때 유용합니다.
아래에 따로 Masonry와 함께 사용하는 예제를 첨부하겠습니다.
onLoadFinish : (함수) 다음 / 이전 페이지를 불러왔을 때 실행되는 콜백입니다. 로딩이 끝나면 한 번 실행됩니다. 위 콜백과 달리 매개변수를 받지 않습니다.
특징
이전 페이지 불러오기 지원
대부분의 infinite scroll 플러그인이 뒤로 가기 버튼을 누르면 첫 페이지로 돌아가거나, 이전 페이지로 돌아가기 힘든 구조입니다만, 이 플러그인은 다양한 옵션으로 이전 페이지의 글도 볼 수 있도록 했습니다.
Masonry 등 사용 가능
위 페이지를 제작하는 데 사용한 자바스크립트입니다. callback 함수를 추가해 간단하게 masonry 등의 플러그인도 사용하실 수 있습니다.
버튼 이용하기
자동으로 다음 페이지를 불러오는 게 마음에 들지 않으시면 위 예제처럼 버튼을 이용하실 수 있습니다.
물론 nextButton, prevButton 둘 다 사용하실 필욘 없습니다.
nextButton은 있지만 prevButton은 없다면, 다음 페이지는 수동으로, 이전 페이지는 자동으로 불러옵니다.
스크롤바 감지
스크롤 바가 없어 Infinite Scroll이 작동할 수 없는 상황이면 자동으로 다음 페이지의 내용을 불러옵니다.
버그 및 개선 사항 제보
깃허브 이슈 페이지
marshall@kakao.com
댓글
라이센스
이 플러그인은 MIT License를 따릅니다.