Skip to content

Instantly share code, notes, and snippets.

@hakur
Created July 16, 2018 03:50
Show Gist options
  • Save hakur/d65668babb67f783ac19c026f3ee5855 to your computer and use it in GitHub Desktop.
Save hakur/d65668babb67f783ac19c026f3ee5855 to your computer and use it in GitHub Desktop.
simple javascript jquery paginator
// 分页类 使用的js依赖是jquery1.10(其他版本未测试) css依赖是bootstrap.css v2 v3都可以 浏览器需要支持数组join方法
// css class default is bootstrap.css (v2 v3 tested) , js function join() support is requied
// @author 喻兴 [email protected]
// @date 2015-07-20
// @example $('#page').pager(); or $('#page').pager({current:50,pages:600,link:'http://www.baidu.com?a=b'});
(function($) {
$.fn.pager = function(options) {
var defaults = {
page: 1,
pages: 1,
link: "",
bodySize : 7, //只能是奇数 only can be odd number
dotNum : 1,
headSize : 1,
footSize : 1,
current : 1,
ulClass : 'pagination',
liClass : '',
aClass : '',
activeClass:'active',
ajaxFunc : null,
nextPage : true,
prevPage : true
}
var options = $.extend(defaults, options);
options.current = parseInt(options.current);
options.pages = parseInt(options.pages);
options.headSize = parseInt(options.headSize);
options.footSize = parseInt(options.footSize);
options.dotNum = parseInt(options.dotNum);
options.bodySize = parseInt(options.bodySize);
var container = $();
var head = [];
var body = [];
var foot = [];
this.each(function() {
$(this).html('');
if(options.pages < 2) {
return false;
}
var lastPage = 0;
var hasLeftDot = false;
var hasRightDot = false;
for(var i=options.page;i<=options.pages;i++) {
lastPage = i;
var reg = /\?/;
if(reg.test(options.link)) {
var linkPage = $.trim(options.link) + '&page='+i;
} else {
var linkPage = $.trim(options.link) + '?page='+i;
}
if(options.pages > options.bodySize+options.doNum) { //如果分页总数超过了 body部分大小和点号所占空格数量 必将出现点号
}
if(i <= options.headSize) {
if(options.current != i) {
head.push('<li class="'+options.liClass+'"><a class="'+options.aClass+'" href="'+linkPage+'">'+i+'</a></li>');
} else {
head.push('<li class="'+options.liClass+' '+options.activeClass+'"><a class="'+options.aClass+'" href="'+linkPage+'">'+i+'</a></li>');
}
}
if(i > options.headSize) { //写完了head开始写body
//更具当前分页判定 哪些分页将会被丢弃
var mol = options.bodySize % 2;
var size = parseInt(options.bodySize / 2);
if(mol) {
//如果是奇数
var leftMin = parseInt(options.current - size);
var rightMax = parseInt(options.current + size);
if(options.current < options.bodySize) {
if(leftMin == 0) {
rightMax += Math.abs(leftMin) + 1;
}
if(leftMin < 0) {
rightMax += Math.abs(leftMin) + 1;
}
}
if(options.current > options.pages-size || options.current == options.pages-size) {
if(options.current == options.pages - size) {
leftMin += size;
}
if(options.current > size) {
leftMin -= size;
}
}
} else {
//如果是偶数
var leftMin = parseInt(options.current - size);
var rightMax = parseInt(options.current + size) + 1;
if(options.current < options.bodySize) {
if(leftMin == 0) {
rightMax += Math.abs(leftMin) + 2;
}
if(leftMin < 0) {
rightMax += Math.abs(leftMin) + 1;
}
}
}
if(i < leftMin) {
hasLeftDot = true;
continue;
}
if(i > rightMax) {
hasRightDot = true;
break;
}
if(i != options.current) {
body.push('<li class="'+options.liClass+'"><a class="'+options.aClass+'" href="'+linkPage+'">'+i+'</a></li>');
} else {
body.push('<li class="'+options.liClass+' '+options.activeClass+'"><a disabled class="'+options.liClass+'" href="javascript:;">'+i+'</a></li>');
}
}
}
if(lastPage <= options.pages - options.footSize) {
for (var a = options.pages;a >= options.pages-options.footSize+1;a--){
var reg = /\?/;
if(reg.test(options.link)) {
var linkPage = $.trim(options.link) + '&page='+a;
} else {
var linkPage = $.trim(options.link) + '?page='+a;
}
if(options.current == a) {
foot.unshift('<li class="'+options.liClass+'"><a class="'+options.liClass+'" href="'+linkPage+'">'+a+'</a></li>');
} else {
foot.unshift('<li class="'+options.liClass+''+'"><a class="'+options.liClass+'" href="'+linkPage+'">'+a+'</a></li>');
}
}
}
if(hasLeftDot == true) {
head.push('<li disabled="disabled" style="cursor:not-allowed;" class="'+options.liClass+'"><a class="'+options.aClass+'" disabled="disabled" style="cursor:not-allowed;" href="javascript:;">...</a></li>');
}
if(hasRightDot == true) {
body.push('<li disabled="disabled" style="cursor:not-allowed;" class="'+options.liClass+'"><a class="'+options.aClass+'" disabled="disabled" style="cursor:not-allowed;" href="javascript:;">...</a></li>');
}
if (options.prevPage == true) {
var p = options.current - 1 < 1 ? 1 : options.current - 1;
var reg = /\?/;
if(reg.test(options.link)) {
var linkPage = $.trim(options.link) + '&page='+p;
} else {
var linkPage = $.trim(options.link) + '?page='+p;
}
head.unshift('<li class="'+options.liClass+'"><a class="'+options.aClass+'" href="'+linkPage+'">上一页</a></li>'); //上一页
}
var p = 1;
var reg = /\?/;
if(reg.test(options.link)) {
var linkPage = $.trim(options.link) + '&page='+p;
} else {
var linkPage = $.trim(options.link) + '?page='+p;
}
head.unshift('<li class="'+options.liClass+'"><a class="'+options.aClass+'" href="'+linkPage+'">首页</a></li>'); //首页
if(options.nextPage == true) {
var p = options.current + 1 > options.pages ? options.pages : options.current + 1;
var reg = /\?/;
if(reg.test(options.link)) {
var linkPage = $.trim(options.link) + '&page='+p;
} else {
var linkPage = $.trim(options.link) + '?page='+p;
}
foot.push('<li class="'+options.liClass+'"><a class="'+options.aClass+'" href="'+linkPage+'">下一页</a></li>'); //下一页
}
var p = options.pages;
var reg = /\?/;
if(reg.test(options.link)) {
var linkPage = $.trim(options.link) + '&page='+p;
} else {
var linkPage = $.trim(options.link) + '?page='+p;
}
foot.push('<li class="'+options.liClass+'"><a class="'+options.aClass+'" href="'+linkPage+'">尾页</a></li>'); //尾页
if(options.pages > 0) {
$(this).html('<ul class="'+options.ulClass+'">'+head.join('')+body.join('')+foot.join('')+'</ul>');
}
if(typeof(options.ajaxFunc) == 'function') {
$(this).find('a').on('click.ajaxLoadData',function(e){
if($(this).attr('href') == 'javascript:;') {
return
}
e.preventDefault();
options.ajaxFunc($(this));
});
}
});
};
})(jQuery);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment