分页逻辑
今天突然觉得分页是个很有逻辑的东西,所以想拎出来讲讲。
需求
分页规则
根据页面内容数量,在页面底部居中显示页码数据。点击页码数字,跳转到相应页数加载内容。
1)不足10条时:不显示该页码栏
2)不足70条时:显示 上一页 1-最大页码 下一页
3)超过70条时:显示 上一页 1 2 3 4 5 … 最大页码 下一页
交互规则
1)【上一页】按钮始终不高亮,【下一页】按钮始终高亮;
2)当内容超过70条时,点击页码数X时做如下判断:
· 若X-1≤3,则显示:1至5 … 最大页码数 。如下图:
· 若X-1>3并且最大页数Y-X>3,则将该页数按钮居中,显示:1 … X-1 X X+1 … Y。如下图:
· 若Y-X≤3,则依次显示:1 … Y-4 Y-3 Y-2 Y-1 Y。如下图:
实现
此处用的是后台分页处理,没有使用ajax来请求,只用来说明分页的逻辑,后台使用的语言为python。
代码如下: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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56{% set count = page['count']%} #页数
{% set cur = int(page['cur'])%} #当前页
{% set path = page['base_path']%} #根路径
{%if count > 1%} #当页码大于一页的时候
<div class="container">
{%if cur > 1%} #当前页码大于一的时候,可以点击上一页,否则上一页不可点击
<a class="page" href="{{path}}/{{cur - 1}}">上一页</a>
{%else%}
<a class="page" href="javascript:;">上一页</a>
{%end%}
{%if count <= 7%} #当页码小于7页的时候,展示所有的页数
{%for p in range(1, count+1)%}
<a class="page {%if p == cur%}page-active{%end%}" href="{{path}}/{{p}}">{{p}}</a>
{%end%}
{%elif count > 7%} #当页码大于7页的时候
{%if cur <= 4%} #当前页码小于4页的时候,显示1至5 ... 最大页码数
{%for p in range(1, 6)%}
<a class="page {%if p == cur%}page-active{%end%}" href="{{path}}/{{p}}">{{p}}</a>
{%end%}
<a class="page-no" href="javascript:;">...</a>
<a class="page" href="{{path}}/{{count}}">{{count}}</a>
{%elif cur >= (count - 3)%} #当前页码在最后4页的时候,显示1 ... Y-4 Y-3 Y-2 Y-1 Y
<a class="page" href="{{path}}/1">1</a>
<a class="page-no" href="javascript:;">...</a>
{%for p in range(count-4, count+1)%}
<a class="page {%if p == cur%}page-active{%end%}" href="{{path}}/{{p}}">{{p}}</a>
{%end%}
{%else%} #否则,页数在中间的时候,显示 1 ... X-1 X X+1 ... Y
<a class="page" href="{{path}}/1">1</a>
<a class="page-no" href="javascript:;">...</a>
{%for p in range(cur-1, cur+2)%}
<a class="page {%if p == cur%}page-active{%end%}" href="{{path}}/{{p}}">{{p}}</a>
{%end%}
<a class="page-no" href="javascript:;">...</a>
<a class="page" href="{{path}}/{{count}}">{{count}}</a>
{%end%}
{%end%}
{%if cur < count%} #当前页码小于页码的时候,可以点击下一页,否则下一页不可点击
<a class="page page-active" href="{{path}}/{{cur+1}}">下一页</a>
{%else%}
<a class="page page-active" href="javascript:;">下一页</a>
{%end%}
<div style="clear: both"></div>
</div>
{%end%}
分页逻辑就讲到这里吧,有空我自己再用php实现了一个用ajax请求分页的代码哈。