分页导航

根据页面的数量,动态生成导航。支持每次点击切换页面的回调。可选是否在点击后回到顶部。

git地址
演示

使用步骤

属性说明

1
2
3
4
5
6
7
8
9
this.selector = $(o.selector)||document; //页码添加 的位置
this.index = o.index||1;//当前页码
this.totalpage = o.totalpage||1;
this.islast = o.islast||true; //打开上一页按钮
this.isnext = o.isnext||true; //打开下一页按钮
this.isnum = o.isnum||true; //是否显示页码数字
this.isonehidden = o.isonehidden||true; //页码为1 是否显示
this.triggerevt = o.triggerevt||null; //改变绑定的事件
this.istotop = o.istotop||true; //点击翻页,即回到页面顶部

调用

本组件只负责页码的切换,点击页码后页面的切换,将作为回调运行。
将在.pagenav动态生成页码。

已加载全部页面的调用方式

页面结构如下,此时.page,需要控制display:none;如果没有给.page添加.on,默认给第一个添加.on。

1
2
3
4
5
6
<div class="slidepage">
<div class="red page"></div>
<div class="green page"></div>
<div class="blue page"></div>
</div>
<div class="pagenav"></div>

js如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/*
* 页面控制
*/
var pagechange ={
UI:function(n){
$(".slidepage").find(".on").removeClass("on");
$(".slidepage .page").eq(n-1).addClass("on");
},
run:function(n){
pagechange.UI(n);
}
}
/*
* 页码组件调用
*/
new Pagination({
selector:".pagenav",
totalpage: $(".slidepage .page").length,
triggerevt: pagechange.run
});

页面是ajax动态传输的

页面结构如下

1
2
3
<div class="mypage">
</div>
<div class="pagenav"></div>

js如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/*
* 页面控制
*/
var pagechange ={
UI:function(data){
//data 数据可能需要处理后写入
$(".mypage")
.empty()
.append(data);
},
run:function(n){
/*
* 继续 ajax
*/
$.ajax(你的请求).done(function(){
pagechange.UI(data);
});
}
}
/*
* 页码组件调用
* 要把这个初始化仅放在,第一次 ajax后;
* 得到页面总数为 n
*/
new Pagination({
selector:".pagenav",
totalpage: n,
triggerevt: pagechange.run
});

优化

页码省略

现在页码默认是全显示,当page过多,页面数字就会显示过多。
例如有20页,会显示1到20。

bug

ajax加载,页码先于页面内容显示

尚未修复。
解决方案,将点击页码的响应,分为事件响应和ui变化2部分。
实际的页码ui变化,作为一个闭包函数,作为triggerevt的参数。
最后在ajax请求完成后调用。
考虑到网络延迟,如果请求事件较长,需要引入等待加载动画。避免用户认为无响应。