9.用js制作静态分页

时间:2025-01-19 15:06:02

效果如图:

9.用js制作静态分页

css 代码:

9.用js制作静态分页
#page {
text-align: center;
}
.page {
display: inline-block;
}
.page a {
padding: 3px 8px;
border: 1px solid #d2d2d2;
text-decoration: none;
margin: 0 2px;
color: #444;
}
.page a.invisible {
visibility: hidden;
}
.page a.on {
color: #fff;
border-color: #d36969;
background: #d36969;
}
9.用js制作静态分页

#page 和 .page 的样式设置是为了让分页居中。

js 代码:

9.用js制作静态分页
var page_num   = 5;
var page_index = 1;
setPages(page_num)
function setPages(num) {
   $('#page').remove();
if (num > 1) {
$('body').append('<div id="page"><div class="page"></div></div>');
var page_text = '<a class="prev btn" href="javascript:void(0)">上一页</a>' +
              '<a class="on" href="javascript:void(0)">1</a>';
for (var i = 2; i <= num; i ++) {
page_text += '<a href="javascript:void(0)">'+i+'</a>';
}
page_text += '<a class="next btn" href="javascript:void(0)">下一页</a>';
$('#page .page').html(page_text);
canShow();
}
}
9.用js制作静态分页

page_num 表示页数,这个页数应该是在加载页面的时候从后台获取,只有当页数有两页或者两页以上,才会有分页;

page_index 表示当前页(这个值会在用 ajax 与后台交互时,将它放入 data 里来传给后台);

$('#page').remove() 这个在后面会解释,创建了 '上一页'、'下一页'和 5 个页码,并插入到 body,这里有一个 canShow 函数。

9.用js制作静态分页
function canShow() {
for (var i = 1; i < $('#page .page a').length - 1; i ++) {
if ($('#page .page a').eq(i).hasClass('on')) {
$('#page .page a').removeClass('invisible');
if (i == 1) {
$('#page .page .prev').addClass('invisible');
} else if (i == page_num) {
$('#page .page .next').addClass('invisible');
}
}
}
}
9.用js制作静态分页

这个函数是用来判断 '上一页' 和 '下一页' 能不能显示。然后就是点击页码或者上下页:

9.用js制作静态分页
$('#page .page a').on('click', function() {
if ($(this).hasClass('on')) return;
$('#page .page a').removeClass('on')
if ($(this).hasClass('prev')) {
page_index --;
$('#page .page a').eq(page_index).addClass('on');
}else if ($(this).hasClass('next')) {
page_index ++;
$('#page .page a').eq(page_index).addClass('on');
}else {
page_index = $(this).index();
$(this).addClass('on');
}
getData();
canShow();
});
9.用js制作静态分页

这一段纯属一个逻辑判断,就不在介绍了,这里也出现一个新函数 getData,就是用来和后台交互的。

9.用js制作静态分页
var url  = '...';
var data = { page_index: page_index, ...};
function getData(){
$.ajax({
url: url,
type: 'post',
data: data,
success: function(msg){
msg = JSON.parse(msg);
showText(msg);
}
})
}
9.用js制作静态分页

把当前页码 page_index 和一些需要的信息放入data 里传给后台,然后获取的数据基本是一个 JSON 数据,要先 parse 一下,这里有一个 showText 函数,就是用来填写内容的。

9.用js制作静态分页
function showText(data){
var content = '';
for (obj in data) {
content += <!-- 布局 -->
}
$('#test').empty().html(content);
}
9.用js制作静态分页

从后台获取的数据通过传参的方式传到这个函数,通过循环把数据取出来,先把需要显示这页内容的 test 里面上个页面的内容清空,再一一对应到布局里。

PS:项目中另一个需求——筛选功能

其实一开始就考虑到这个,所以才把创建分页,用一个函数 setPages 来封装,并在里面写了 $('#page').remove(),然后筛选时,在那个和后台交互的 getData 函数中,后台会多传一个数据表示筛选结果总共有几页,就只要再调用 setPages 这个函数,并把页数传进去就解决了。