무한 스크롤은 페이지의 내용을 아래로 스크롤하면 새로운 내용이 덧붙여져서 많은 양의 컨텐츠를 동일한 페이지에 계속해서 보여주는 방법입니다. 이러한 기능을 구현해주는 jScroll은 jQuery 플러그인으로 만들어져 있으며, MIT와 GPL v2 의 듀얼 라이선스로 제공되어 집니다. 글 마지막에 예제 전체 소스를 첨부 했습니다.
1. 다음 사이트에서 프로그램을 다운 받습니다.(http://jscroll.com/)
- 다운로드 링크는 Github로 연면됩니다. 필요한 파일은 jquery.jscroll.js 만 있으면 됩니다.
2. 필요한 파일을 포함합니다.
- jQuery 플러그인이므로 jQuery가 먼저 필요합니다.
- 다음받은 jquery.jscroll.js 파일을 포함하니다.
- 무한 스크롤을 수행할 코드를 작성합니다.
<script type="text/javascript" src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script type="text/javascript" src="./jquery.jscroll.js"></script>
<script type="text/javascript">
//<![CDATA[
$(document).ready(function () {
$('#autoScroll').jscroll({
autoTrigger: true,
loadingHtml: '<div class="next"><img src="./images/loading.gif" alt="Loading" /></div>',
nextSelector: 'a.nextPage:last'
});
});
//]]>
</script>
- $('#autoScroll').jscroll(); 은 페이지 내에서 id가 autScroll 인 요소에 무한 스크롤을 실행합니다.
- autoTrigger는 스크롤시 다음 컨텐츠를 자동으로 가져올지 지정합니다. true이면 아래로 스크롤하면 자동으로 다음 내용을 가져오고, false이면 링크를 클릭해야 다음 내용을 가져옵니다. 기본값은 true 입니다.
- 파라미터로 주어진 loadingHtml 은 새로운 컨텐츠를 불러올때 로딩 표시를 하는 html을 지정합니다.
- nextSelector는 컨텐츠중 다음 페이지를 불러올 링크를 찾는데 사용됩니다. 기본 값은 "a:last"로 컨텐츠 중의 마지막 <a> 태그를 사용합니다. 마지막 페이지에 링크가 있으면 오류가 발생하므로 여기서는 'a.nextPage:last'로 지정하여 nextPage 클래스를 가지는 <a> 태그중 마지막 것을 선택하도록 하였습니다.
3. 무한스크롤이 이루어질 페이지 영역 입니다.
- id가 autoScroll 인 요소를 지정합니다.
- 기본적으로 이미지 두 개가 보여집니다. 영역내의 마지막에 나오는 링크가 스크롤시 다음 내용을 불러올 링크입니다. 이 링크는 실제 화면에 보이지는 않게 처리 됩니다.
<div class="scroll" id="autoScroll">
<div>
<img src="./images/IMGP8563.JPG" width="400" />
<img src="./images/IMGP8564.JPG" width="400" />
</div>
<div class="next"><a href="contents.php?mode=auto&page=2" class="nextPage">다음 페이지</a></div>
</div>
4. 테스트용 서버측 구현입니다.
- page 파라미터를 이용해서 다음에 보여줄 컨텐츠를 지정합니다.
- 간단한 예제라 빠르게 로딩이 되어 버려서 컨텐츠가 추가되는것이 표시가 나지 않으므로, sleep(1); 을 이용해서 페이지 로딩에 1초씩 지연을 줬습니다.
- 마지막 페이지에는 다음 페이지로의 링크가 없습니다.
<?php
$page = $_GET['page'];
$mode = $_GET['mode'];
$start = 65;
if($mode == "auto") {
sleep(1);
$no1 = ($page - 2) * 2 + $start;
$no2 = $no1 + 1;
$nextPage = $page + 1;
echo('<div>');
echo('<img src="./images/IMGP85'.$no1.'.JPG" width="400" /> ');
echo('<img src="./images/IMGP85'.$no2.'.JPG" width="400" /> ');
echo('</div> ');
if($page < 5) {
echo('<div class="next"><a href="contents.php?mode=auto&page='.$nextPage.'" class="nextPage">다음 페이지</a></div>');
}
}
?>
5. 실행 결과 입니다.
6. jScroll에 사용되어지는 파라미터 목록입니다.
파라미터 | 기본값 | 설명 |
---|---|---|
debug | false | 디버깅 정보가 console로 출력됩니다. |
autoTrigger | true | true 이면 다음 페이지를 미리 자동으로 로딩하고, 나머지는 스크롤시 로딩 됩니다. false이면 다음 페이지 링크를 클릭해야 로딩됩니다. |
autoTriggerUntil | false | 1 이상의 숫자를 지정하면 지정된 페이지 까지는 자동 로딩되고, 나머지는 링크를 클릭해야 로딩됩니다. autoTrigger가 true 로 설정되어야 동작합니다. |
loadingHtml | '<small>Loading...</small>' | 로딩중 표시를 지정합니다. |
padding | 0 | 하단의 얼마까지 스크롤 하면 다음 페이지를 로딩할지를 지정합니다. 기본값은 0으로 끝까지 스크롤해야 로딩합니다. |
nextSelector | 'a:last' | 다음 페이지를 가져올 링크를 지정합니다. 기본값을 <a> 태그중 마지막 입니다. |
contentSelector | '' | 응답받은 내용을 일부만 사용할 경우 사용할 요소를 찾는 선택자 입니다. 기본값을 전체를 사용합니다. |
callback | false | 이 옵션에 함수를 지정하면 각 페이지 로드가 끝날 때 호출됩니다. |
※예제소스
'프로그래밍 > 자바스크립트' 카테고리의 다른 글
jQuery UI datepicker - 자바스크립트 달력 사용하기 (2) | 2018.04.20 |
---|---|
CKEditor 4 설치와 PHP 연동 하기 (14) | 2018.04.19 |
다음 지도로 약도 만들기 (2) | 2018.04.19 |
자바스크립트 정규식 객체와 자주 쓰이는 함수 (0) | 2018.04.17 |
자바스크립트 쿠키 - jQuery Cookie Plugin (0) | 2018.04.17 |