9.用js制作静态分页
效果如图:

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制作静态分页的更多相关文章
- 使用Vue.js制作仿Metronic高级表格(一)静态设计
Metronic高级表格是Metonic框架中自行实现的表格,其底层是Datatables.本教程将主要使用Vue实现交互部分,使用Bootstrap做样式库.jQuery做部分用户交互(弹窗). 使 ...
- 基于node.js制作爬虫教程
前言:最近想学习node.js,突然在网上看到基于node的爬虫制作教程,所以简单学习了一下,把这篇文章分享给同样初学node.js的朋友. 目标:爬取 http://tweixin.yueyishu ...
- jq分页插件,支持动态,静态分页的插件,简单易用。
工作中经常要用到分页功能.为了方便封装了一个比较通用的分页插件开源出来了,简单易用. 官网:https://cwlch.github.io/Ch_Paging 下载地址:https://github. ...
- jQuery静态分页功能
分页功能在做项目的过程中是常常用到的,下面是我常用的一款分页效果: 1.分页的CSS样式(page.css) #setpage { margin: 15px auto; text-align: cen ...
- js实现前端分页页码管理
用JS实现前端分页页码管理,可以很美观的区分页码显示(这也是参考大多数网站的分页页码展示),能够有很好的用户体验,这也是有业务需要就写了一下,还是新手,经验不足,欢迎指出批评! 首先先看效果图: 这是 ...
- js制作带有遮罩弹出层实现登录小窗口
要实现的效果如下 点击“登录”按钮后,弹出登录小窗口,并且有遮罩层(这个名词还是百度知道的,以前只知道效果,却不知道名字) 在没有点击“登录”按钮之前登录小窗口不显示,点击“登录”按钮后小窗口显示,并 ...
- thinkPHP生成静态分页列表
改造分页类Pagehtml.class.php <?php // 静态分页列表类 class Pagehtml extends Think { //分页url public $pageUrl; ...
- 制作静态库文件(.a文件)
制作静态库文件(.a文件) 1.创建静态库工程: 在Xcode中new一个新的project,选择IOS下面的Framework&Library,下面有一个Cocoa Touch Static ...
- Nginx对于图片,js等静态文件的缓存设置
以下是自学it网--中级班上课笔记 网址:www.zixue.it Nginx对于图片,js等静态文件的缓存设置 注:这个缓存是指针对浏览器所做的缓存,不是指服务器端的数据缓存. 主要知识点: loc ...
随机推荐
- BZOJ 1001 - 狼抓兔子 - [Dinic最大流][对偶图最短路]
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1001 Description现在小朋友们最喜欢的"喜羊羊与灰太狼", ...
- rabbitmq简单实例
JMS组件:activemq(慢)AMQP组件(advance message queue protocol):rabbitmq和kafka 一..消息队列解决了什么问题?异步处理应用解耦流量削锋日志 ...
- Deck of Cards ZOJ - 2852 dp 多决策 三维 滚动更新
题意:一个特殊21点游戏 具体http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2852 题解:建一个三维dp,表示三个卡槽分别 ...
- XPC connection interrupted
用Analysis 静态分析代码,发现了一些问题,修改之后,然后用Instrument -> Leaks对内存做动态分析,发现一个错误: 控制台报错:XPC connection interru ...
- ArcEngine二次开发,TOCControl控件上使用contextMenuStrip
右键菜单,在二次开发中很实用,以前没用过,最近通过一本书了解到,一直想找这么一个控件来用. 一般的控件,将contextMenuStrip控件拖到所依托的控件上,然后输入自己想要的几个功能. 在所依 ...
- [GRE] GRE协议介绍
写的一般,主要看下图就行了. https://blog.csdn.net/Mary19920410/article/details/72303641 前半部分介绍还不错,后半部分没看. http:// ...
- mysql学习【第1篇】:初识MySQL
狂神声明 : 文章均为自己的学习笔记 , 转载一定注明出处 ; 编辑不易 , 防君子不防小人~共勉 ! mysql学习[第1篇]:初识MySQL 只会写代码的是码农:学好数据库,基本能混口饭吃:在此基 ...
- 状压dp的另一种形式
做的那么多都是一些比较怎么说呢,都是在数网格一类的题目之中,这些题目有些有点固定的套路,而一些需要状态压缩的题目呢,则么是真正对状态转移的考验. 这道题呢,被彻底打脸了,以后一定要任性一点一道题做不出 ...
- Selenium功能自动化测试工具
Selenium也是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE.Mozilla Firefox.Mozilla Suite ...
- tensorflow入门笔记(一) tf.app.flags.FLAGS
tf.app.flags.DEFINE_xxx()就是添加命令行的optional argument(可选参数),而tf.app.flags.FLAGS可以从对应的命令行参数取出参数.举例如下: FL ...