jQuery插件pagination.js源码解读
pagination的github地址:https://github.com/gbirke/jquery_pagination
公司用的是1.2的版本,所以我就读1.2的了。
jQuery.fn.pagination = function(maxentries, opts){
opts = $.extend({
isCurrentInfo: false,//是否显示当前页信息: 当前第1页,共10页
currentCls: '.current-info',//当前页class
items_per_page:10,//每页最多有几项
num_display_entries:10,//中间的页数 如 1 2 ... 5 6 7 8 9 ... 12 13 中间页数是5
current_page:0,//当前页
num_edge_entries:1,//两端页数 如 1 2...5 6 7 8 9...12 13两端页数是2
link_to:"javascript:;",//href
prev_text:"上一页",
next_text:"下一页",
ellipse_text:"...",//省略的页数的文本
prev_show_always:true,//总是显示上一页
next_show_always:true,//总是显示下一页
callback:function(){return false;}//回调
},opts||{});
return this.each(function() {
//code
});
};
我们需要给pagination方法传递2个参数,
maxentries:总共有多少项,必填
opts,各种配置项,都为选填。
function numPages(){}计算总页数
function getInterval(){} 获取中间页数这里的开始页和结束页,作为数组返回[5,10]
function pageSelected(page_id, evt){} 分页的链接处理函数
function drawLinks() {}绘制链接
关键就是drawLinks:
function drawLinks() {
panel.empty();//每一次绘制都是全部重绘
var interval = getInterval();//获取开始和结束页
var np = numPages();//获取总页数
//pageSelected获取到当前页,然后重绘了链接
var getClickHandler = function(page_id) {
return function(evt){ return pageSelected(page_id,evt); }
}
// 添加一个单连接
var appendItem = function(page_id, appendopts){
page_id = page_id<0?0:(page_id<np?page_id:np-1);
appendopts = $.extend({text:page_id+1, classes:""}, appendopts||{});
if(page_id == current_page){//如果是当前页,生成span
var lnk = $("<span class='current'>"+(appendopts.text)+"</span>");
}
else{//否则生成超链接
var lnk = $("<a>"+(appendopts.text)+"</a>")
.bind("click", getClickHandler(page_id))//点击超链接时回调
.attr('href', opts.link_to.replace(/__id__/,page_id));
}
if(appendopts.classes){lnk.addClass(appendopts.classes);}//添加class
panel.append(lnk);//将连接append到panel
}
// 绘制上一页
if(opts.prev_text && (current_page > 0 || opts.prev_show_always)){
appendItem(current_page-1,{text:opts.prev_text, classes:"prev"});
}
// 绘制起始点 1 2 ...
if (interval[0] > 0 && opts.num_edge_entries > 0)
{
var end = Math.min(opts.num_edge_entries, interval[0]);
for(var i=0; i<end; i++) {
appendItem(i);
}
if(opts.num_edge_entries < interval[0] && opts.ellipse_text)
{
$("<span>"+opts.ellipse_text+"</span>").appendTo(panel);
}
}
// 绘制中间部分的连接 5 6 7 8 9
for(var i=interval[0]; i<interval[1]; i++) {
appendItem(i);
}
// 绘制结束点 ...12 13
if (interval[1] < np && opts.num_edge_entries > 0)
{
if(np-opts.num_edge_entries > interval[1]&& opts.ellipse_text)
{
$("<span>"+opts.ellipse_text+"</span>").appendTo(panel);
}
var begin = Math.max(np-opts.num_edge_entries, interval[1]);
for(var i=begin; i<np; i++) {
appendItem(i);
} }
// 绘制下一页
if(opts.next_text && (current_page < np-1 || opts.next_show_always)){
appendItem(current_page+1,{text:opts.next_text, classes:"next"});
}
// 绘制当前第几页,共几页
if(opts.isCurrentInfo){
var sInfo = '当前第 ' + (current_page + 1) + ' 页,共 ' + np + ' 页';
$(opts.currentCls).html(sInfo);
} }
jQuery插件pagination.js源码解读的更多相关文章
- 第二十五课:jQuery.event.trigger的源码解读
本课主要来讲解jQuery.event.trigger的源码解读. trigger = function(event, data, elem, onlyHandlers){ if(elem & ...
- js便签笔记(10) - 分享:json2.js源码解读笔记
1. 如何理解“json” 首先应该意识到,json是一种数据转换格式,既然是个“格式”,就是个抽象的东西.它不是js对象,也不是字符串,它只是一种格式,一种规定而已. 这个格式规定了如何将js对象转 ...
- js便签笔记(10) - 分享:json.js源码解读笔记
1. 如何理解“json” 首先应该意识到,json是一种数据转换格式,既然是个“格式”,就是个抽象的东西.它不是js对象,也不是字符串,它只是一种格式,一种规定而已. 这个格式规定了如何将js对象转 ...
- fastclick.js源码解读分析
阅读优秀的js插件和库源码,可以加深我们对web开发的理解和提高js能力,本人能力有限,只能粗略读懂一些小型插件,这里带来对fastclick源码的解读,望各位大神不吝指教~! fastclick诞生 ...
- 亚马逊左侧菜单延迟z三角 jquery插件jquery.menu-aim.js源码解读
关于亚马逊的左侧菜单延迟,之前一直不知道它的实现原理.梦神提到了z三角,我也不知道这是什么东西.13号那天很有空,等领导们签字完我就可以走了.下午的时候,找到了一篇博客:http://jayuh.co ...
- prototype.js 源码解读(02)
如果你想研究一些比较大型的js框架的源码的话,本人建议你从其最初的版本开始研读,因为最初的版本东西少,易于研究,而后的版本基本都是在其基础上不断扩充罢了,所以,接下来我不准备完全解读prototype ...
- prototype.js 源码解读(01)
prototype.js是一个设计的非常优雅且很有实用价值的js基础类库,其源码非常值得研究.研究它的源码不仅能提升个人水平,而且对你打下坚实的js基础也很有帮助.因本人技术水平有限,该解读仅供参考. ...
- require.js 源码解读——配置默认上下文
首先,我们先来简单说一下,require.js的原理: 1.载入模块 2.通过模块名解析出模块信息,以及计算出URL 3.通过创建SCRIPT的形式把模块加载到页面中. 4.判断被加载的脚本,如 ...
- json2.js源码解读记录
相关内容:json详细用法.js语法.unicode.正则 json特点--最简单.最小巧的经典js库. json作者:道克拉斯.克劳福德(Douglas Crockford)--js大牛 出 ...
随机推荐
- ffmpeg full help
Hyper fast Audio and Video encoder usage: ffmpeg [options] [[infile options] -i infile]... {[outfile ...
- fiddler_test
fiddler学习第二天 啦啦啦 拉拉呀
- Java多线程Callable和Future类详解
public interface Callable<V> 返回结果并且可能抛出异常的任务.实现者定义了一个不带任何参数的叫做 call 的方法 public in ...
- 【转载】Unity3D的断点调试功能
原文链接:http://liweizhaolili.blog.163.com/blog/static/162307442013214485190/ 断点调试功能可谓是程序员必备的功能了.Unit ...
- java推荐书籍及下载
前言 一直有这么个想法,列一下我个人认为在学习和使用Java过程中可以推荐一读的书籍,给初学者或者想深入的朋友一些建议,帮助成长.推荐的的都是我自己读过,也会推荐一些朋友读过并且口碑不错的书籍.以下的 ...
- MongoDB复制集高可用选举机制(三)
复制集高可用选举机制 在上一章介绍了MongoDB的架构,复制集的架构直接影响着故障切换时的结果.为了能够有效的故障切换,请确保至少有一个节点能够顺利升职为主节点.保证在拥有核心业务系统的数据中心中拥 ...
- 一个轻量级AOP的实现(开源)
事先声明,本项目参考AOP in C#和园内大神张逸的文章,思路神马的都不是自己的! 为了让项目的代码看起来更干净,需要一个AOP! 于是就实现了一个非常简单的,非常轻量级,有多轻量级呢? 实现的AO ...
- 使用Rest api管理Ceph网关
背景 开发基于Ceph RadosGW的微服务,需要实现调用方可以通过rest api就能创建用户,获取用户信息等功能. 实现 Ceph的RadosGW自身就有该功能,这些创建用户.获取用户信息.获取 ...
- Adventure Works 教程
多维建模(Adventure Works 教程) 欢迎使用 Analysis Services 教程. 本教程通过在所有示例中使用虚构公司 Adventure Works Cycles,说明如 ...
- CSS3:nth-child()伪类选择器,Table表格奇偶数行定义样式
转自爱设计 原文链接http://www.dangshopex.com/jishufenxiang/WEBkaifajishu/8653.html CSS3的强大,让人惊叹,人们在惊喜之余,又不得不为 ...