Just do IT
Published 2021. 7. 16. 17:52
페이징 - AJAX (2) Programing/기타

AJAX (1) 에서 paging(pageNo)를 실행하며 마지막에 boardPaging 메소드를 호출했었다

$("#boardList").append(html);
	boardPaging(resultDatas.total, dataPerPage, pageCount, pageNo);

resultDatas.total : 출력될 리스트 총 개수 (count 쿼리로 받아옴)

dataPerPage : 한 페이지에 나타낼 데이터 수 = pageSize와 동일

pageCount : 한 페이지에 나타낼 페이지 수 (리스트 아래에 보여질 페이지 번호의 개수)

pageNo : 현재 페이지 번호


var totalData; // 총 데이터 수  
var dataPerPage = 10;    // 한 페이지에 나타낼 데이터 수
var pageCount = 5;        // 한 화면에 나타낼 페이지 수 
	    
function boardPaging(totalData, dataPerPage, pageCount, currentPage){

	var totalPage = Math.ceil(totalData/dataPerPage);    // 총 페이지 수
        var pageGroup = Math.ceil(currentPage/pageCount);    // 페이지 그룹
        
	var last = pageGroup * pageCount;    // 화면에 보여질 마지막 페이지 번호
	if(last > totalPage){
		last = totalPage;
	}
	var first = last - (pageCount-1);    // 화면에 보여질 첫번째 페이지 번호
	var next = last+1;
	var prev = first-1;

	if(totalPage < 1){
		first = last;
	}
        
   var $pingingView = $("#boardPaging");
   $pingingView.empty();
       
   var html = "";
        
	if(totalData > 0 && last > 1){
		html += '<a href="javascript:;" onclick="paging(1);"  id="1" pagenumber="1">처음</a>';
	}
        
   	if(prev > 0){
      	 html += '<a href="javascript:;" type="button" onclick="paging('+prev+');" id="prev" >이전</a>';
    }
          	
	for(var i= first ; i <= last; i++){ 
		if(i>0){
			 if(last == i){
	    		 html += '&nbsp;<a href="javascript:;" onclick="paging('+i+');"   id="' + i + '" pagenumber="'+i+'">' + i + '</a>'; 
			 }else{
				 html += '&nbsp;<a href="javascript:;" onclick="paging('+i+');"   id="' + i + '" pagenumber="'+i+'">' + i + '</a>'; 
	    	 }
			
		 }
	 }
		
	if(last < totalPage){
		html += '<a type="button"  onclick="paging('+next+');" id="next">다음</a>';	
	}

	if(totalData > 0  && last > 1){ 
		html += '&nbsp;<a href="javascript:;" onclick="paging('+totalPage+');"   id="' + totalPage+ '" pagenumber="'+totalPage+'">마지막</a>'; 
	}

	$("#boardPaging").html(html);    // 페이지 목록 생성
	$("#boardPaging a#" + currentPage).parent('em#active').addClass("active");
        
	$("#boardPaging a").click(function(){          
		var $item = $(this);
		var $id = $item.attr("id");
	    var selectedPage = $item.text();	    
	   
	    if($id == "next")    selectedPage = next;
	    if($id == "prev")    selectedPage = prev;
	    
	    var filter = "win16|win32|win64|mac|macintel";
	    if ( navigator.platform ) { 
	    	if ( filter.indexOf( navigator.platform.toLowerCase() ) < 0 ) { //mobile 
	    		$('html, body').scrollTop(1300);
	    	}else { //pc 
	    		$('html, body').scrollTop(2600);
	    	}
	    }

	    paging(totalData, dataPerPage, pageCount, selectedPage);	    
	}); 

}

▼ 코드를 한 줄, 한 블럭씩 분석해보자~!

 

var totalData;            // 총 데이터 수  
var dataPerPage = 10;     // 한 페이지에 나타낼 데이터 수
var pageCount = 5;        // 한 화면에 나타낼 페이지 수

boardPaging 호출 시 들어가는 데이터 중 resultDatas.total을 담을 변수 totalData 생성

dataPerPage는 pageSize와 동일하게 지정

pageCount도 고정이기 때문에 직접 지정

 

var totalPage = Math.ceil(totalData/dataPerPage);    // 총 페이지 수
var pageGroup = Math.ceil(currentPage/pageCount);    // 페이지 그룹
        
var last = pageGroup * pageCount;    // 화면에 보여질 마지막 페이지 번호
if(last > totalPage){
	last = totalPage;
}

totalPage = totaldata / dataPerPage  -> 3 = 30 / 10  -> 총 페이지 수 : 3 페이지

pageGroup = currentPage / pageCount  -> 1 = 1 / 5 -> 페이지 그룹 : 

                                                                           (5개의 페이지 번호로 묶인 그룹 번호)

last = pageGroup * pageCount  -> 5 = 1 * 5 

- 한 페이지 그룹에서의 시작 번호와 끝 번호를 정해줍니다

- 위의 계산을 정리하면 1번 페이지 그룹의 시작 번호는 1, 끝 번호는 5가 됩니다.

 

※ 자바스크립트 메소드

    Math.floor() : 소수점 이하를 버림한다.

    Math.ceil() : 소수점 이하를 올림한다.

    Math.round() : 소수점 이하를 반올림한다.

 

if(last>totalPage) {

        last = totalPage;

}

- 총 페이지 수가 화면에 보여질 마지막 번호보다 작으면 마지막 번호에 총 페이지수를 대입해줍니다.

 

var first = last - (pageCount-1);    // 화면에 보여질 첫번째 페이지 번호
var next = last+1;
var prev = first-1;

if(totalPage < 1){
	first = last;
}

리스트 화면에 보이는 첫번째 수와, 다음, 이전의 수를 연산해줍니다.

first : 첫번째 수 , next : 다음, prev : 이전

 

var $pingingView = $("#boardPaging");
$pingingView.empty();
       
var html = "";

jsp 페이지에서 태그의 아이디가 boardPaging인 부분의 내용을 지워줍니다.

※ 자바스크립트 .empty() : 해당 태그에 있는 내용을 지우는 명령어입니다.

                                  해당 태그는 유지되면서 태그에 작성된 내용'만' 지워줍니다.

                     .remove() : 태그를 포함한 모든 요소를 지울 때 사용되는 명령어입니다. 

해당 태그의 내용을 지워준 뒤에 그 부분에 넣어줄 내용을 담을 문자열 html을 생성해 줍니다.

 

if(totalData > 0 && last > 1){
	html += '<a href="javascript:;" onclick="paging(1);"  id="1" pagenumber="1">처음</a>';
}
        
if(prev > 0){
   	 html += '<a href="javascript:;" type="button" onclick="paging('+prev+');" id="prev" >이전</a>';
}

- 총 데이터의 수(리스트에 출력될 글의 총 갯수)가 0보다 크고, 마지막 페이지의 수가 1보다 크면, 즉

현재  패이지가 1이 아니라면 '처음' 버튼을 맨 앞에 생성하게 됩니다.

- 이전의 수가 1 이상이면 '이전' 버튼을 생성하게 됩니다.

- 각각 생성되는 버튼을 html 문자열에 추가하여 줍니다.

 

for(var i= first ; i <= last; i++){ 
	if(i>0){
		 if(last == i){
	   		 html += '&nbsp;<a href="javascript:;" onclick="paging('+i+');"   
             id="' + i + '" pagenumber="'+i+'">' + i + '</a>'; 
		 }else{
			 html += '&nbsp;<a href="javascript:;" onclick="paging('+i+');"   
             id="' + i + '" pagenumber="'+i+'">' + i + '</a>'; 
	   	 }	
	 }
}

- 처음과 끝 사이의 페이지 숫자를 출력하는 부분입니다.

- 처음 숫자(first)부터 마지막 숫자(last)까지 반복해서 출력을 하게 됩니다.

- 이 또한 html 문자열에 추가하여서 후에 jsp에서 볼 수 있습니다.

 

if(last < totalPage){
	html += '<a type="button"  onclick="paging('+next+');" id="next">다음</a>';	
}

if(totalData > 0  && last > 1){ 
	html += '&nbsp;<a href="javascript:;" onclick="paging('+totalPage+');"   
    id="' + totalPage+ '" pagenumber="'+totalPage+'">마지막</a>'; 
}

- 마지막 페이지가 총 페이지수보다 작으면 다음 버튼을 출력하게 됩니다.

- 출력될 리스트의 총 개수가 0보다 크고, 마지막 페이지 번호가 1보다 크면 마지막 버튼을 맨 뒤에 출력하게 됩니다.

 

$("#boardPaging").html(html);    // 페이지 목록 생성
$("#boardPaging a#" + currentPage).parent('em#active').addClass("active");

- 해당 아이디의 태그에 페이지 목록을 생성하게 됩니다.

- $( 셀렉터 ).parent()  -  셀렉터에 해당하는 부모요소를 가져옵니다.
- $( 셀렉터 ).parent().addClass( '클래스명' ) : 셀렉터에 해당하는 부모요소에 클래스명 클래스 추가합니다.

 

 

$("#boardPaging a").click(function(){          
		var $item = $(this);
		var $id = $item.attr("id");
	    var selectedPage = $item.text();	    
	   
	    if($id == "next")    selectedPage = next;
	    if($id == "prev")    selectedPage = prev;
	    
	    var filter = "win16|win32|win64|mac|macintel";
	    if ( navigator.platform ) { 
	    	if ( filter.indexOf( navigator.platform.toLowerCase() ) < 0 ) { 
            		//mobile 
	    		$('html, body').scrollTop(1300);
	    	}else { //pc 
	    		$('html, body').scrollTop(2600);
	    	}
	    }

	    paging(totalData, dataPerPage, pageCount, selectedPage);	    
	});

- 마지막 코드는 모바일과 웹에 따라 맞게 출력하게끔 해주는 코드입니다. 

- 모바일과 웹에 대한 코드는 추후에 다시 한번 설명하겠습니다.

- 이렇게 하면 기본적인 페이징이 될 것입니다.

'Programing > 기타' 카테고리의 다른 글

주석의 정의와 종류  (0) 2022.12.05
페이징 - AJAX (1)  (0) 2021.07.13
페이징 - MSSQL  (0) 2021.07.13
Spring - Tiles  (0) 2021.07.09
profile

Just do IT

@AmyG

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!