JavaScript 实现分页效果
一、需求示例图
二、需求分析
1、分页依据元素: 当前页码, 后端的页码总数
2、页数小于等于6, 直接在当前页码显示左右相邻页码
3、页数大于等于7, 根据 余数(= 总页码数 - 当前页码数)来做判断
三、注释源码
注:代码依赖jQuery库
function paging ( currentPage, totalPage ) { var p = currentPage, t = totalPage, linkStr = ''; // 页码链接(后面 + 页码参数),也可以作为参数传递 // 插入一个页码包装器 $('<div class="pagination"></div>').appendTo('body'); var pageWrap = $('.pagination'); if (t > 0) { // 只有一页,插入当前页码并返回 if (t == 1) { pageWrap.append('<a class="active">' + p + '</a>'); return; } // 插入当前页码 pageWrap.append('<a class="active">' + p + '</a>'); // 处理上一页,下一页 var curPage = pageWrap.find('.active'); prevStr = '<a class="prev" href="' + linkStr + 'p=' + (p-1) + '">' + '<' + '</a>', nextStr = '<a class="next" href="' + linkStr + 'p=' + (p+1) + '">' + '>' + '</a>'; if (p === 1) { curPage.before('<a class="prev"><</a>'); curPage.after(nextStr); } else if (p === t) { curPage.before(prevStr); curPage.after('<a class="next">></a>'); } else { curPage.before(prevStr); curPage.after(nextStr); } // 处理当前页相邻页码 // 页数小于等于6 if (p <= 6) { for (var i = 0; i < t-p; i++) { curPage.after('<a href="' + linkStr + 'p=' + (t-i) + '">' + (t-i) + '</a>'); } for (var i = 0; i < p-1; i++) { curPage.before('<a href="' + linkStr + 'p=' + (i+1) + '">' + (i+1) + '</a>'); } } // 页数大于等于7, 判断当前页左右的页码数来处理 else { // 间隔页码数 = 总页码 - 当前页码 var intervalNum = t - p; // 当前页左右各最多显示5个页码 // 显示右侧页码 if (intervalNum > 5) { // p必须为数值类型,否则(p+1)会执行字符串拼接 var rtStr = '<a href="' + linkStr + 'p=' + (p+1) + '">' + (p+1) +'</a>' + '<a href="' + linkStr + 'p=' + (p+2) + '">' + (p+2) +'</a>' + '<span class="apostrophe">...</span>' + '<a href="' + linkStr + 'p=' + (t-1) + '">' + (t-1) +'</a>' + '<a href="' + linkStr + 'p=' + t + '">'+ t +'</a>'; curPage.after(rtStr); } else { for (var i = 0; i < intervalNum; i++) { curPage.after('<a href="' + linkStr + 'p=' + (t - i) + '">' + (t - i) + '</a>'); } } // 显示左侧页码 if (p > 6) { var ltStr = '<a href="' + linkStr + 'p=' + 1 + '">' + 1 +'</a>' + '<a href="' + linkStr + 'p=' + 2 + '">'+ 2 +'</a>' + '<span class="apostrophe">...</span>' + '<a href="' + linkStr + 'p=' + (p-2) + '">' + (p-2) +'</a>' + '<a href="' + linkStr + 'p=' + (p-1) + '">'+ (p-1) +'</a>'; curPage.before(ltStr); } else { for (var i=0; i < p-1; i++) { curPage.before('<a href="' + linkStr + 'p=' + (1+i) + '">' + (1+i) + '</a>'); } } // 处理页码跳转 var actionStr = '<div class="action-wrap"><label for="action-pageval">跳转到:</label>' + '<input id="action-pageval" type="text"></input>'+ '<a class="page-submit">GO</a>' + '</div>'; $('.pagination .next').after(actionStr); function setActionLink(e){ var actionLink, target, pageVal; target = e.target; pageVal = parseInt($(target).val(), 10); if (pageVal >= 1) { $('.action-wrap .page-submit').attr('href', linkStr + 'p=' + pageVal); } if (e.which == 13) { window.location.href = linkStr + 'p=' + pageVal; } } $('#action-pageval').bind('keypress change', setActionLink); } } } // 方法调用 paging( 5, 120 );
PS:该代码整理自项目实践代码,水平有限,望高手指点。