本文将介绍数据分页的前端代码实现,非后端查询分页。
自己实现分页的好处不言而喻,皮肤样式定制型强啊。
整个分页的核心逻辑也就下面这段,不管总页数有多少页,我们只需要处理好展示在网页上的这5个的规律,也就能解决所有的问题了。
1.总页数 <= 一页能展示的分页数 2.总页数 > 一页能展示的分页数 2.1 当前选中页 <= 一页能展示的分页数的一半(大方向取整) 2.2 当前选中页 > 一页能展示的分页数的一半(大方向取整) 2.2.1 如果选中最后几页,起始位置和终点是固定不变的
下面是分页的核心代码(以下代码是nodejs实现,其他语言原理想通):
// 数据库查询的分页数据 const data = { pageCount: 总页数, currentPage:当前页 } // 分页按钮数量 const paginationNumber = 7; // 开始数和结束数 let startNum = 1; let endNum = data.pageCount; // 以下是核心逻辑实现 if (data.pageCount <= paginationNumber) { startNum = 1; endNum = data.pageCount; } else { if (data.currentPage <= Math.ceil(paginationNumber/2)) { startNum = 1; endNum = paginationNumber; } else { startNum = data.currentPage - (Math.ceil(paginationNumber/2)-1); endNum = data.currentPage + (Math.ceil(paginationNumber/2)-1); if (endNum > data.pageCount) { endNum = data.pageCount; startNum = data.pageCount - (paginationNumber-1); } } }
通过上面核心代码已经获取了 startNum和endNum的值了,现在循环输出即可。完整分页函数:
pagination(data, paginationNumber = 7){ // 开始数和结束数 let startNum = 1; let endNum = data.pageCount; // 以下是核心逻辑实现 if (data.pageCount <= paginationNumber) { startNum = 1; endNum = data.pageCount; } else { if (data.currentPage <= Math.ceil(paginationNumber/2)) { startNum = 1; endNum = paginationNumber; } else { startNum = data.currentPage - (Math.ceil(paginationNumber/2)-1); endNum = data.currentPage + (Math.ceil(paginationNumber/2)-1); if (endNum > data.pageCount) { endNum = data.pageCount; startNum = data.pageCount - (paginationNumber-1); } } } // 获取当前页url,todo::此处逻辑根据自己业务实现 const _url = {当前页url}; // 输出html let _html = ''; if(data.currentPage>1){ _html += `<li class="page-item prev"><a class="page-link" href="${_url}">首页</a></li>`; _html += `<li class="page-item prev"><a class="page-link" href="${_url}page=${data.currentPage-1}">上一页</a></li>`; }else{ _html += `<li class="page-item prev disabled"><span class="page-link">首页</span></li>`; _html += `<li class="page-item prev disabled"><span class="page-link">上一页</span></li>`; } for (let i=startNum;i<=endNum;i++){ _html += `<li class="page-item${i === data.currentPage?' active':''}"><a class="page-link" href="${_url}page=${i}">${i}</a></li>`; } if(data.currentPage<data.pageCount){ _html += `<li class="page-item prev"><a class="page-link" href="${_url}page=${data.currentPage+1}">下一页</a></li>`; _html += `<li class="page-item prev"><a class="page-link" href="${_url}page=${data.pageCount}">尾页</a></li>`; }else{ _html += `<li class="page-item prev disabled"><span class="page-link">下一页</span></li>`; _html += `<li class="page-item prev disabled"><span class="page-link">尾页</span></li>`; } return `<ul class="pagination">${_html}</ul>`; }