개발이야기/jQuery

[jQuery] 스크롤(Scroll) Ajax 페이징 사용법, 예제

후린개발자 2023. 5. 4.
반응형

 jQuery를 사용하여 페이지 스크롤이 끝까지 내려갔을 때 새로운 데이터를 가져와서 화면에 보여주는 무한 스크롤 기능을 구현하는 코드입니다.

 

페이지 로드 시 page와 list를 초기화하고, page_start를 계산하고 List 함수를 한번 호출 합니다. List 함수는 list (보여지는 게시글 수) 와 page_start 를 data로 전송 하고 응답은 JSON 형식으로 받아 옵니다.

ajax.php 는 실제 db 조회 후 data를 뿌려 주어야 하지만 간단한 예제이므로 totalCount=20 으로 정하고 5개씩 data 변수를 JSON 형식으로 반환 하고 있습니다. 스크롤 이벤트가 발생하면, 스크롤바가 윈도우 창의 아래쪽에 닿았는지 확인하고, page가 total_page보다 작으면 List 함수를 실행합니다. 스크롤 이벤트가 발생하면, 스크롤바가 윈도우 창의 아래쪽에 닿았는지 확인하고, page가 total_page보다 작으면 List 함수를 실행합니다.

 

VIEW 페이지

<script type="text/javascript" src="https://code.jquery.com/jquery-1.10.2.min.js" /></script>
<script>
$(document).ready(function() {
	var page = 1; //처음 보여준 페이지 다음부터 시작
	var list = 5; //한 페이지에 보여지는 게시글 수             
	var total_page=1;
	var page_start = (page-1)*list; // db에서 몇번째 자료부터 보여줄지 정합니다

	$.fn.List = function(){
		$.ajax({
			type:"post", 
			dataType: "json",
			data: { 
				'list' : list,
				'page_start' : page_start
			},
			url: "ajax.php", 
		}).done(function(data) { 
			page += 1; //페이지를 1 올립니다.
			page_start = (page-1)* list;

			total_page = Math.ceil(data.count/list);

			if(data.data){
				$('#empty').remove();
			}

			$('#contents').append(data.data);
		});
	}

	$(window).scroll(function() {
		if ($('body').height() <= ($(window).height() + $(window).scrollTop())) { //스크롤바가 윈도우창 아래쪽에 닿았을때
			if(page<=total_page){ //페이지가 페이지 총합보다 적으면
				$(this).List();
			}
		}
	});
	$(this).List();
});	

</script>
<body>
	<div id="contents">
		<div id="empty">
			데이터가 없습니다.
		</div>
	</div>
</body>

 

Ajax 페이지

<?php
$totalCount=20;

for ($i = 1; $i <= 5; $i++) {
  $data.='<div class="box" style="font-size:30px; height:500px; border:1px solid;">Box '.$i.'</div>';
}

$rst = json_encode(array("count"=>$totalCount, "data"=>$data));

echo $rst;
?>

 

최초 페이지 로드시

위의 이미지는 최초 페이지 로드시 list=5, page_start=0 이고 다음 스크롤 이벤트가 발생하면 list=5, page_start=5,... 

다음은 list=5, page_start=10 으로 진행된다. 

 

반응형

댓글

💲 추천 글