Created
July 16, 2018 03:50
-
-
Save hakur/d65668babb67f783ac19c026f3ee5855 to your computer and use it in GitHub Desktop.
simple javascript jquery paginator
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 分页类 使用的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