我在这里有一个相当简单的分页算法,但它没有像我希望的那样工作。
目前它正在显示如下
1 2 3 ... 33 34 35 [36] 37 38 ... 47 48 49 50
什么时候应该这样显示
1 2 3 ... 33 34 35 [36] 37 38 39 ... 48 49 50
这是我的代码,我写得很快。它似乎也在不断运行(循环不会停止),但我不知道为什么。
$(function(){
var pages = 50; //Total number of pages
var current = 36; //The current page we are on
var before = 3; //Number of links to display before current
var after = 3; //Same as above but after
var start = (current - before); //The number of the first link
var end = (current + after); //Number of the end link
for(var i = 1; i <= pages; i++){
if(i == (before + 1)){
i = start;
document.write('...');
}
else if(i == (current + after)){
i = (pages - after);
document.write('...');
}
if(i == current){
document.write(' ['+i+'] ');
}
else{
document.write(' '+i+' ');
}
}
});
答案 0 :(得分:2)
请在您使用它的循环中的所有位置的2个位置将after
修复为after + 1
。
另外,我不确定您的代码是否能正常处理边缘情况(例如当前== 2) - 您可能想要测试
答案 1 :(得分:2)
如果(current + after) > (pages - after)
和(current + after) < pages
,则此代码将永久运行,因为:
else if(i == (current + after)){
i = (pages - after);
document.write('...');
}
每次i
到达current + after
时,它都会缩短为pages - after
,并且该周期将无限期地继续
答案 2 :(得分:1)
current + after
在这里是39(36 + 3),所以难怪它显示“...”而不是39,将“之后”增加1来解决此问题答案 3 :(得分:0)
在大多数语言中,数组使用基于零的索引是有原因的:数学更简单。在您的情况下,由于您显然不能使用从零开始的索引,您只需要修复一个一个错误:
else if(i == (current + after + 1)){
i = (pages - after + 1);
document.write('...');
}
答案 4 :(得分:0)
以下算法在当前页面周围提供5页
例:
- [X]是当前页面
- 在这种情况下,总页数为20
<[1] 2 3 4 5>
<1 [2] 3 4 5>
<1 2 [3] 4 5>
<2 3 [4] 5 6>
... numbers in between ...
<15 16 [17] 18 19>
<16 17 [18] 19 20>
<16 17 18 [19] 20>
<16 17 18 19 [20]>
或者如果总页数少于5,说3 ...
结果看起来像
<[1] 2 3>
等等。
function (page, totalPages) {
var leftBoundry = Math.max(1, page - 2)
var rightBoundry = Math.min(totalPages, page + 2)
var arr = []
var emptyRight = 2 - (rightBoundry - page)
var emptyLeft = 2 - (page - leftBoundry)
leftBoundry = Math.max(1, leftBoundry - emptyRight)
rightBoundry = Math.min(totalPages, rightBoundry + emptyLeft)
for (var i = leftBoundry; i <= rightBoundry; i++) {
arr.push(i)
}
return arr;
}