效果如图:

css 代码:

#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;
}

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

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();
}
}

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

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

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

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');
}
}
}
}

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

$('#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();
});

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

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);
}
})
}

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

function showText(data){
var content = '';
for (obj in data) {
content += <!-- 布局 -->
}
$('#test').empty().html(content);
}

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

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

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

9.用js制作静态分页的更多相关文章

  1. 使用Vue.js制作仿Metronic高级表格(一)静态设计

    Metronic高级表格是Metonic框架中自行实现的表格,其底层是Datatables.本教程将主要使用Vue实现交互部分,使用Bootstrap做样式库.jQuery做部分用户交互(弹窗). 使 ...

  2. 基于node.js制作爬虫教程

    前言:最近想学习node.js,突然在网上看到基于node的爬虫制作教程,所以简单学习了一下,把这篇文章分享给同样初学node.js的朋友. 目标:爬取 http://tweixin.yueyishu ...

  3. jq分页插件,支持动态,静态分页的插件,简单易用。

    工作中经常要用到分页功能.为了方便封装了一个比较通用的分页插件开源出来了,简单易用. 官网:https://cwlch.github.io/Ch_Paging 下载地址:https://github. ...

  4. jQuery静态分页功能

    分页功能在做项目的过程中是常常用到的,下面是我常用的一款分页效果: 1.分页的CSS样式(page.css) #setpage { margin: 15px auto; text-align: cen ...

  5. js实现前端分页页码管理

    用JS实现前端分页页码管理,可以很美观的区分页码显示(这也是参考大多数网站的分页页码展示),能够有很好的用户体验,这也是有业务需要就写了一下,还是新手,经验不足,欢迎指出批评! 首先先看效果图: 这是 ...

  6. js制作带有遮罩弹出层实现登录小窗口

    要实现的效果如下 点击“登录”按钮后,弹出登录小窗口,并且有遮罩层(这个名词还是百度知道的,以前只知道效果,却不知道名字) 在没有点击“登录”按钮之前登录小窗口不显示,点击“登录”按钮后小窗口显示,并 ...

  7. thinkPHP生成静态分页列表

    改造分页类Pagehtml.class.php <?php // 静态分页列表类 class Pagehtml extends Think { //分页url public $pageUrl; ...

  8. 制作静态库文件(.a文件)

    制作静态库文件(.a文件) 1.创建静态库工程: 在Xcode中new一个新的project,选择IOS下面的Framework&Library,下面有一个Cocoa Touch Static ...

  9. Nginx对于图片,js等静态文件的缓存设置

    以下是自学it网--中级班上课笔记 网址:www.zixue.it Nginx对于图片,js等静态文件的缓存设置 注:这个缓存是指针对浏览器所做的缓存,不是指服务器端的数据缓存. 主要知识点: loc ...

随机推荐

  1. Html吸顶效果

    Html吸顶效果 一.HTML HTML中需要给div一个id <!DOCTYPE html> <html lang="en"> <head> ...

  2. SQL之层次查询

    层次查询是一种确定数据行间关系的一种操作手段.层次查询遍历的是一个树形结构.基本语法如下,以下语法嵌入到标准SQL中即可达到层次查询的目的: level,... ...[注释:伪列,用于select子 ...

  3. instrument之Time Profiler总结

    一.工欲善其事必先利其器 time profile时间分析工具用来检测应用CPU的使用情况,可以看到应用程序中各个方法正在消耗CPU时间,使用大量CPU不一定是个问题.客户端中动画就对CPU依赖就非常 ...

  4. 配置ASM以及创建恢复目录

    本次配置ASM沿用了搭建RAC的环境配置,系统选用CENTOS6.8 首先本地配置YUM,安装GRID集群件所需要的RPM包 [root@rac01 Packages]# cd /etc/yum.re ...

  5. tomcat在Eclipse中和idea中的使用

    在eclipse中的使用 下载 http://tomcat.apache.org/ 部署项目到tomcat 常见问题 访问时如何出掉项目名 中文乱码问题 1.浏览器编码问题,修改浏览器的编码 2.js ...

  6. 洛谷P3242 接水果 [HNOI2015] 整体二分

    正解:整体二分+树状数组 解题报告: 传送门! 题目还是大概解释下?虽然其实是看得懂的来着,,, 大概就是说给一棵树.给定一些询问,每个询问都是说在两个点之间的路径上的子路径的第k大是什么 然后看到这 ...

  7. 【托业】【新托业TOEIC新题型真题】学习笔记5-题库二->P7

    --------------------------------------单词-------------------------------------- amenity 适意:休闲设施 onsit ...

  8. python-面向对象-01_面向对象(OOP)基本概念

    面向对象(OOP)基本概念 面向对象编程 —— Object Oriented Programming 简写 OOP 目标 了解 面向对象 基本概念 01. 面向对象基本概念 我们之前学习的编程方式就 ...

  9. 火币网API文档——Websocket 请求与订阅示例

    1. 访问地址 Pro 站行情请求地址为:wss://api.huobipro.com/ws HADAX 站行情请求地址为:wss://api.hadax.com/ws 2. 数据压缩 WebSock ...

  10. 【剑指offer】复杂链表的复制

    一.题目: 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数中的节点引用, ...