* 2017.5.11 增加了迭代回调功能,用于实现实时的页数展示与分页数据请求。

* 2016.7.03 修复bug,优化代码逻辑

* 2016.5.25 修复如果找不到目标对象的错误抛出。

* 2016.5.11 修复当实际页数(pageNumber)小于生成的页码间隔数时的bug

* 2016.4.3   实现原生JS分页功能

 ;
(function(root) {
'use strict'; function page(params) { this.dom = params.dom || null;
this.fn = params.fn || null;
this.padding = params.padding || 2;
this.total = params.total;
this.curpagenumber = params.curpagenumber || 0;
this.detailed = params.detailed || null; this.cur = 1;
this.start = 1;
this.end = this.total; if (this.curpagenumber) {
this.cur = this.curpagenumber;
} this.dom && this.total && this.core(); }
page.prototype.core = function(curentPageNumber) {
var a = []; if (curentPageNumber) {
this.cur = curentPageNumber;
} if (this.cur > 1) {
a.push('<a href="javascript:;" class="prev">上一页</a>');
this.detailed && a.push('<a href="javascript:;" class="first">首页</a>');
a.push('...');
} if (this.total > this.padding * 2 + 1) { //判断是否启用间隔数,如果总页数大于间隔数的2倍加1的话。
if (this.cur <= this.padding) { // 如果当前页码小于间隔数
this.start = 1;
this.end = this.padding * 2 + 1;
} else if (this.cur > this.padding && this.total >= this.cur + this.padding) { // 如果当前页码大于间隔数且总页数大于当前页面加上间隔数
this.start = this.cur - this.padding;
this.end = this.cur + this.padding;
} else {
this.start = this.total - this.padding * 2;
this.end = this.total;
}
} else {
this.start = 1,
this.end = this.total;
} for (; this.start <= this.end; this.start++) {
if (this.cur != this.start) {
a.push('<a href="javascript:;">' + this.start + '</a>');
} else {
a.push('<span class="cur">' + this.cur + '</span>');
}
}
if (this.cur < this.total - 1) {
a.push('...');
this.detailed && a.push('<a href="javascript:;" class="last">尾页</a>');
}
if (this.cur < this.total) {
a.push('<a href="javascript:;" class="next">下一页</a>');
} this.dom.innerHTML = a.join('');
this.bind();
}; page.prototype.bind = function() {
var _this = this; this.dom.onclick = function(event) {
var event = event || window.event,
src = event.srcElement || event.target; if (src.nodeName == 'A') {
switch (src.className) {
case '':
_this.cur = parseInt(src.innerHTML);
break;
case 'prev':
_this.cur = --_this.cur;
break;
case 'next':
_this.cur = ++_this.cur;
break;
case 'last':
_this.cur = _this.total;
break;
case 'first':
_this.cur = 1;
}
_this.fn && _this.fn(_this.cur);
_this.core();
}
}; }; root.page = page; })(window);

一般使用方式:

 page({
'dom':document.getElementById('page'),
'total':13,
'padding':2,
'fn':function(cur){
console.log(cur);
}
});
/* {} 是一个参数对象,其参数详细如下:
|- dom :一个dom对象,用于保存生成的页码。
|- total : 总页数。
|- padding : 生成的间隔,默认间隔为2个。
|- detailed : 是否出现首页及尾页
|- fn : 当前页码的回调函数。
*/

高级使用方式:在接口中回调

 function getData(pageNum) {
$.post('data.htm', {
'pageNumber': pageNum
}, function(data) {
if (data.errorCode === 0) {
page({
dom: document.querySelectorAll('.pages')[0],
total: data.total,
curpagenumber: pageNum,
fn: function(num) {
getData(num);
}
});
}
})

自己封装的JS分页功能[用于搭配后台使用]的更多相关文章

  1. jsp、js分页功能的简单总结

    一.概述 首先,我们要明确为何需要分页技术,主要原因有以下: 1.分页可以提高客户体验度,适当地选择合适的数据条数,让页面显得更有条理,使得用户体验感良好,避免过多数据的冗余. 2.提高性能的需要.分 ...

  2. js -- 分页功能

    html 代码 <html> <head> <meta charset='utf-8'> <script type="text/javascript ...

  3. jQuery+AJAX实现纯js分页功能

    使用jQuery的AJAX技术,在bootstrap的框架下搭建的纯js分页 bootstrap作为Twitter推的一款前端框架,效果个人还是觉得很不错的.这次只是拿来作为网页元素的css样式表使用 ...

  4. 前端js分页功能的实现,非常实用,新手必看

    分享一个前端拿到数据后,自己生成分页的案例,案例如图显示,点击搜索后查询数据,显示数据列表,前端根据数据显示正确的分页 附上代码:代码附上,简单粗暴,自己用过的,兼容性好,没有封装,可以很好的分页原理 ...

  5. js分页功能实现

    实现一个js的分页并在弹出框中显示 1.分页插件使用:bootstarp-paginator.js,需要先引入bootstarp.js和jquery.js等: !function($){"u ...

  6. 纯JS前端分页方法(JS分页)

    1.JS分页函数:开发过程中,分页功能一般是后台提供接口,前端只要传page(当前页码)和pageSize(每页最大显示条数)及对应的其他查询条件,就可以返回所需分页显示的数据. 但是有时也需要前端本 ...

  7. 简单封装分页功能pageView.js

    分页是一个很简单,通用的功能.作为一个有经验的前端开发人员,有义务把代码中类似这样公共的基础性的东西抽象出来,一来是改善代码的整体质量,更重要的是为了将来做类似的功能或者类似的项目,能减少不必要的重复 ...

  8. C#设计模式总结 C#设计模式(22)——访问者模式(Vistor Pattern) C#设计模式总结 .NET Core launch.json 简介 利用Bootstrap Paginator插件和knockout.js完成分页功能 图片在线裁剪和图片上传总结 循序渐进学.Net Core Web Api开发系列【2】:利用Swagger调试WebApi

    C#设计模式总结 一. 设计原则 使用设计模式的根本原因是适应变化,提高代码复用率,使软件更具有可维护性和可扩展性.并且,在进行设计的时候,也需要遵循以下几个原则:单一职责原则.开放封闭原则.里氏代替 ...

  9. [Ext JS 4] Grid 实战之分页功能

    前言 分页功能的实现有两种途径: 一种是服务端分页方式, 也就是web客户端传递页码参数给服务端,服务端根据页面参数返回指定条数的数据.也就是要多少取多少.这种方式比较适合Grid  的数据量很大,需 ...

随机推荐

  1. Linux2:vi、ls、cd、pwd、mkdir、rm、mv、cp、cat、tail

    前言 从本篇文章开始,每篇文章将写10个Linux命令,个人的写作想法是: 1.常用的Linux命令,那些生僻的.不常用的就不写了 2.从实际考虑,只列出每个命令常见的用法和参数选项,有兴趣了解进一步 ...

  2. static关键字作用总结

    之前讲到final关键字的作用是每次面试的时候我必问求职者的两个问题之一,另外一个问题就是文本会写到的static.final和static一样,都是一个小问题可以看到一个人的基础是否扎实以及平时是否 ...

  3. 一次外企QQ面试

    无忧上挂了简历,让个外企的hr约好面试,今天刚面完,整理出来给大家看看.难度不是很大,基本就是Asp.net Mvc 用到的东西,没有问数据库方面的. Part I – Frontend  1. Tr ...

  4. 赴美工作常识(Part 6 - 绿卡排队)

    上一篇<赴美工作常识(Part 5 - 绿卡优先级)>解释完排队的优先级是怎么确定的,以及 PERM 和 I–140 表的意义,接下来就要解释一下队具体是怎么排的以及排到之后的 I–485 ...

  5. [ACM_几何] The Deadly Olympic Returns!!! (空间相对运动之最短距离)

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=28235#problem/B 题目大意: 有两个同时再空间中匀速运动的导弹,告诉一个时间以 ...

  6. Senparc.Weixin.MP SDK 微信公众平台开发教程(九):自定义菜单接口说明

    上一篇<Senparc.Weixin.MP SDK 微信公众平台开发教程(八):通用接口说明>介绍了如何通过通用接口获取AccessToken,有了AccessToken,我们就可以来操作 ...

  7. Git学习笔记(6)——Bug和Feature分支

    本文主要记录了通过Git来调试Bug和添加新的功能,也就是Bug分支和Feature分支,以及分支的推送. Bug分支 通过Git,我们可以为每个Bug建立一个分支,Bug修复后,合并分支,然后将临时 ...

  8. DDD~Unity在DDD中的使用

    回到目录 上一讲介绍了DDD中的领域层,并提到下次要讲Unity,所以这篇文章当然就要介绍它了,呵呵,Unity是Microsoft.Practices中的一部分,主要实现了依赖注入的功能,或者叫它控 ...

  9. Java并发包中CountDownLatch的工作原理、使用示例

    1. CountDownLatch的介绍 CountDownLatch是一个同步工具,它主要用线程执行之间的协作.CountDownLatch 的作用和 Thread.join() 方法类似,让一些线 ...

  10. UML基础系列:用例图

    1. 概述 用例图(Use Case Diagram)描述“用户.需求.系统功能单元”之间的关系,是参与者所能观察和使用到的系统功能模型图. 用例图用于需求分析阶段 用例图包含6个基本元素:参与者(A ...