基于jquery的分页插件

一、效果图。
在这里插入图片描述
二、html示例。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta charset="utf-8" />
		<title>jquery的分页插件</title>
		<link rel="icon" href="../../img/favicon.ico" type="image/ico">
		<script src="../../jquery.min.js" type="text/javascript" charset="utf-8"></script>
		<script src="jquery.pagebar.1.0.js" type="text/javascript" charset="utf-8"></script>
	</head>
	<script type="text/javascript">
    	$(function () {
    		var options = {
				dataTotal:499,	//数据总数
				pageSize:10,	//每页显示数
				btnNum:8,		//分页按钮显示数
				current:40		//当前页
			};
		    $('#page').pagebar(options,function(params){
		    	console.log(params);
		    }); //调用插件
			var options2 = {
				dataTotal:100,	//数据总数
				pageSize:3,	//每页显示数
				btnNum:5,		//分页按钮显示数
				current:4		//当前页
			};
		    $('#page2').pagebar(options2,function(params){
		    	console.log(params);
		    }); //调用插件
		});
	</script>
	<body>
		<div id="page"></div>
		<br />
		<div id="page2"></div>
	</body>
</html>

三、jquery源码。

/**
 * @Author: zql
 * @Version:1.0
 * Licensed under the MIT license
 */
"use strict";//严格模式
;(function($){
	var _css = ".zql-pagebar{text-align: center;margin: 10px auto;box-sizing: border-box;}"
    	+".zql-pagebar *{line-height: 26px;}"
    	+".zql-pagebar button{margin:0 3px;min-width:30px;background: #ffffff;border: 1px solid #e5e5e5;color: #5e5e5e;cursor: pointer;outline: none;text-align: center;}"
    	+".zql-pagebar button:hover{background: #0eb0d2;color: #ffffff;}"
    	+".zql-pagebar .zql-btn-dis{cursor: default;opacity: .7;background: #eeeeee;color: #5e5e5e;}"
    	+".zql-pagebar .zql-btn-dis:hover{background: #eeeeee;color: #5e5e5e;}"
    	+".zql-pagebar .zql-current-page{background: #0eb0d2;color: #ffffff;}"
    	+".zql-pagebar .zql-page-input{width:30px;height: 26px;margin:0 3px;padding: 0;text-align: center;background: #ffffff;border: 1px solid #e5e5e5;color: #5e5e5e;outline: none;}"
    	+".zql-pagebar .zql-page-text{color: #2b2b2b;font-size: 13px;}"
    	;
    $('head').append('<style type="text/css">'+_css+'</style>');
	//私有方法,检测参数是否合法
	function _isValid(options) {
		return !options || (options && typeof options === "object") ? true : false;
	}
	//是否是整数
	function _isInteger(num){
//		因为number类型没有indexOf方法,所有要转为字符串类型,否则会报Uncaught TypeError: num.indexOf is not a function
		var point = (""+num).indexOf(".");
//		var point = num.toString().indexOf(".");
		if(!isNaN(num) && point==-1){
			return true;
		}else{
			return false;
		}
	}
	$.fn.extend({
		"pagebar":function(options,callback){
			//检测用户传进来的参数是否合法
		    if (!_isValid(options)){
		    	return;
		    }
		    //默认设置
		    var defaults = {
				dataTotal:500,	//数据总数
				pageSize:10,	//每页显示数
				btnNum:8,		//分页按钮显示数
				current:40		//当前页
			};
		    //使用jQuery.extend 覆盖插件默认参数
			var _opt = $.extend({}, defaults, options);
			//计算总页数
			var _totalPage = Math.ceil(_opt.dataTotal/_opt.pageSize);
			//不足2页不加载插件
			if(_totalPage<2){
				return;
			}
			//当前页
			var _curPage = _opt.current;
			//分页显示数
			var _btnNum = _opt.btnNum;
			var obj = this;
			obj.append('<div class="zql-pagebar"></div>');
			//分页加载事件
			function pageEvent(){
				//跳转页框的值为当前页加1
				var inpVal = (_curPage==_totalPage)?1:Number(_curPage)+1;
				var append_html = '<button class="zql-prev-page">上一页</button>';
				_btnNum = _opt.btnNum>_totalPage?_totalPage:_opt.btnNum;
				for(var i=0;i<_btnNum;i++){
					//当前被选中的居中按钮数下标
					var halfIndex = Math.ceil(_btnNum/2)-1;
					if(((_totalPage-_curPage)<(halfIndex+1))){
						if(_curPage==(_totalPage-_btnNum+i+1)){
							append_html += '<button class="zql-page-num zql-current-page">'+(_totalPage-_btnNum+i+1)+'</button>';
						}else{
							append_html += '<button class="zql-page-num">'+(_totalPage-_btnNum+i+1)+'</button>';
						}
					}else if(_curPage>halfIndex){
						if(halfIndex==i){
							append_html += '<button class="zql-page-num zql-current-page">'+_curPage+'</button>';
						}else{
							append_html += '<button class="zql-page-num">'+(_curPage-halfIndex+i)+'</button>';
						}
					}else{
						if(_curPage==(i+1)){
							append_html += '<button class="zql-page-num zql-current-page">'+(i+1)+'</button>';
						}else{
							append_html += '<button class="zql-page-num">'+(i+1)+'</button>';
						}
					}
				}
				append_html += '<button class="zql-next-page">下一页</button>';
				append_html += '<span class="zql-page-text">共 '+_totalPage+' 页,总数据'+_opt.dataTotal+',每页显示数</span>';
				append_html += '<input name="size" class="zql-page-input" type="text" value="'+_opt.pageSize+'">';
				append_html += '<span class="zql-page-text">,跳转到</span>';
				append_html += '<input name="page" class="zql-page-input" type="text" value="'+inpVal+'">';
				append_html += '<span class="zql-page-text">页</span>';
				append_html += '<button class="zql-to-page-num">确定</button>';
				obj.children('.zql-pagebar').append(append_html);
				
				if(_curPage==1){
					obj.find('.zql-prev-page').attr('disabled','disabled').addClass('zql-btn-dis');
				}else{
					obj.find('.zql-prev-page').removeAttr('disabled').removeClass('zql-btn-dis');
				}
				if(_curPage==_totalPage){
					obj.find('.zql-next-page').attr('disabled','disabled').addClass('zql-btn-dis');
				}else{
					obj.find('.zql-next-page').removeAttr('disabled').removeClass('zql-btn-dis');
				}
			}
			//刷新分页插件
			function refrechPage(){
				obj.children('.zql-pagebar').empty();
				pageEvent();
			}
			//获取当前参数
			function getParams(){
				var params = {
					totalPage:Number(_totalPage),
					curPage:Number(_curPage),
					pageSize:Number(_opt.pageSize)
				};
				return params;
			}
			pageEvent();
			//上一页点击事件
			obj.on('click','.zql-prev-page',function(){
				_curPage--;
				refrechPage();
				callback(getParams());
			});
			//下一页点击事件
			obj.on('click','.zql-next-page',function(){
				_curPage++;
				obj.children('.zql-pagebar').empty();
				refrechPage();
				callback(getParams());
			});
			//每页点击事件
			obj.on('click','.zql-page-num',function(){
				var $this = $(this);
				var current = $this.hasClass('zql-current-page');
				if(!current){
					_curPage = $this.text();
					refrechPage();
					callback(getParams());
				}
			});
			//确定按钮的点击事件
			obj.on('click','.zql-to-page-num',function(){
				var pageSize = obj.find('input[name=size]').val();
				if(pageSize!=_opt.pageSize && _isInteger(pageSize)){//每页显示数是否变化
					_opt.pageSize = pageSize;
					_totalPage = Math.ceil(_opt.dataTotal/_opt.pageSize);
				}
				_curPage = obj.find('input[name=page]').val();
				if(!_isInteger(_curPage)||_curPage>_totalPage||_curPage<1){//如果输入的不是整数,或者当前页大于总页数,或者小于1,将跳转到第一页
					_curPage = 1;
				}
				refrechPage();
				callback(getParams());
			});
		}
	});
})(jQuery);

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值