페이징 알고리즘을 구현 해 보았다. 틀리는 내용이 있으면 꼭 지적 부탁드립니다.
-
현재 페이지(page)
-
전체 컨텐츠 수(totalRows)
-
한페이지 당 보여질 컨텐츠 수(perPage)
-
전체 페이지(totalPage)
- totalPage = totalRows % perPage > 0 ? (totalRows / perPage) + 1 : totalRows / perPage
- 한페이지에 출력될 개수보다 조금 더 많은 경우 한페이지를 더 추가 해주는 것이다
-
다음 페이지(nextPage)
- nextPage = Math.min(totalPage, page + 1)
- 전체 페이지(totalPage) 를 넘을 수가 없다
-
이전 페이지(prevPage)
- prevPage = Math.max(1, page - 1)
- 1페이지보다 작을 수 없다
-
다음 10페이지(next10Pages)
- next10Pages = Math.min(totalPage, page + 10)
-
이전 10페이지(prev10Pages)
- prev10Pages = Math.max(1, page - 10)
-
한 페이지에 보여질 10개의 페이지 인덱스 [startPage...endPage]
- startPage = (page / 10) * 10 + 1
- endPage = Math.min(startPage + 9, totalPage)
-
limit [1..10] 범위를 쿼리 [fromIndex..toIndex]
- fromIndex = (page - 1) * perPage
- toIndex = Math.min(totalRows, fromIndex + perPage)