jQuery 插件写作实例一 pagination

这次根据设计做一个分页的插件。

分页栏的UI设计如图:


步骤:

1、写界面的HTML实现

2、鼠标的视觉效果

3、动作、事件

4、转作js生成

步骤一:

方便使用与嵌入任何位置,使用div做容器,分页栏也属于列表的结构,主体使用li来实现。

	<div class="pagination">
		<ul>
			<li><a>«</a></li>
			<li><a>1</a></li>
			<li><a>2</a></li>
			<li><a>3</a></li>
			<li><a>4</a></li>
			<li><a>5</a></li>
			<li><a>»</a></li>
		</ul>
	</div>

初步实现css

	.pagination{
		border:0px solid black;
		display:inline-block;
		font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
		font-size:14px;
		
	}
	.pagination ul{
		border:0px solid red;
		display:inline-block;
		margin:0px;
		list-style:none;
		padding:0px;
	}
	.pagination ul li{
		border:0px solid green;
		display:inline;
		line-height:20px;
	}
	.pagination ul li a{
		padding: 4px 12px;
		line-height: 20px;
		background-color: #1d1d1d;
		text-decoration: none;
		color: #fff;
		float: left;
		margin: 0px 5px;
		border-radius: 4px;
		cursor: pointer;
	}
效果如图:



步骤二:

添加鼠标hover的效果:

        .pagination ul li a:hover{
		background-color: #d3d3d3;
		color:#1d1d1d;
	}

效果如图:



接着实现current和disabled,完整css如下:

	.pagination ul li a:hover,
	.pagination .current a,
	.pagination .current a:hover{
		background-color: #d3d3d3;
		color:#1d1d1d;
	}
	.pagination .disabled a,
	.pagination .disabled a:hover{
		cursor: default;
		background-image: none;
		opacity: .65;
		filter: alpha(opacity=65);
		-webkit-box-shadow: none;
		-moz-box-shadow: none;
		box-shadow: none;
		background-color:#1d1d1d;
		color: #fff;
	}

步骤三:

分页栏的每个按钮,设置onclick事件:

function(pageIndex_){...}

输入参数为选择的页码,中间处理过程交给用户自定义,一般写跳转如:

window.location.href = '...' + pageIndex_;

步骤四:

着手编码插件,步骤有4:

1、定义输入、默认值

2、处理输入、生成代码执行所需参数

3、生成html元素

4、绑定事件

5、打包


第一步,定义输入、默认值:

当前页码(index)、总页数(total)、显示的页码数(displayNum)、点击分页栏触发的事件接口(onChange)

	jQuery.fn.pagination = function(settings_){
		var _defaults = {
			index:1,
			total:0,
			displayNum:5,
			onChange:null
		};

		var _settings = $.extend({}, _defaults, settings_);

               //...
        }

第二步,处理输入、生成代码执行所需参数。

		if(_settings.total <= 0) {return;}
		if(_settings.index > _settings.total) {return;}

		var _startIndex = parseInt((_settings.index - 1) / _settings.displayNum) * _settings.displayNum + 1;
		var _endIndex = _startIndex + _settings.displayNum - 1;
		if(_endIndex > _settings.total) {_endIndex = _settings.total;}
		if(typeof(_settings.onChange) != 'function'){
			_settings.onChange = function(pageIndex_){}
		}

_startIndex: 页码起算位置

_endIndex:页码截止位置


第三步,生成html元素,按照html写js:

		var obj = this;
		obj.attr('class', 'pagination');

		var oUl = $('<ul></ul>');
		var oBtnPrev = $('<li><a class="btn-prev">«</a></li>');
		var oBtnNext = $('<li><a>»</a></li>');
		oUl.append(oBtnPrev);
		for(var i=_startIndex; i<=_endIndex; i++){
			var oLi = $('<li><a>' + i + '</a></li>');
			oUl.append(oLi);
			if(i == _settings.index) {oLi.addClass('current');continue;}
		}
		oUl.append(oBtnNext);
		obj.append(oUl);

		if(_settings.index == 1){
			oBtnPrev.addClass('disabled');
		}
		if(_settings.index >= _endIndex){
			oBtnNext.addClass('disabled');
		}

第四步,绑定事件

给页码的事件绑定:

		for(var i=_startIndex; i<=_endIndex; i++){
			var oLi = $('<li><a>' + i + '</a></li>');
			oUl.append(oLi);
			if(i == _settings.index) {oLi.addClass('current');continue;}
			//step 4
			oLi.click(function(){
				//console.log($(this).text())
				//alert($(this).text())
				_settings.onChange.apply(this, [parseInt($(this).text())]);
			});
		}

给上下页的事件绑定:

		//step 4
		oBtnPrev.click(function(){
			var _i = _settings.index - 1;
			if (_i <= 0) {return;}
			_settings.onChange.apply(this, [_i]);
		});

		oBtnNext.click(function(){
			var _i = _settings.index + 1;
			if(_i > _settings.total){return;}
			_settings.onChange.apply(this, [_i]);
		});

第五步,打包成js包

(function(){
	jQuery.fn.pagination = function(settings_){
		//step 1
		var _defaults = {
			index:1,
			total:0,
			displayNum:5,
			onChange:null
		};

		//step 2
		var _settings = $.extend({}, _defaults, settings_);
		
		if(_settings.total <= 0) {return;}
		if(_settings.index > _settings.total) {return;}

		var _startIndex = parseInt((_settings.index - 1) / _settings.displayNum) * _settings.displayNum + 1;
		var _endIndex = _startIndex + _settings.displayNum - 1;
		if(_endIndex > _settings.total) {_endIndex = _settings.total;}
		if(typeof(_settings.onChange) != 'function'){
			_settings.onChange = function(pageIndex_){}
		}

		//step 3
		var obj = this;
		obj.attr('class', 'pagination');

		var oUl = $('<ul></ul>');
		var oBtnPrev = $('<li><a class="btn-prev">«</a></li>');
		var oBtnNext = $('<li><a>»</a></li>');
		oUl.append(oBtnPrev);
		for(var i=_startIndex; i<=_endIndex; i++){
			var oLi = $('<li><a>' + i + '</a></li>');
			oUl.append(oLi);
			if(i == _settings.index) {oLi.addClass('current');continue;}
			//step 4
			oLi.click(function(){
				//console.log($(this).text())
				//alert($(this).text())
				_settings.onChange.apply(this, [parseInt($(this).text())]);
			});
		}
		oUl.append(oBtnNext);
		obj.append(oUl);

		if(_settings.index == 1){
			oBtnPrev.addClass('disabled');
		}
		if(_settings.index >= _endIndex){
			oBtnNext.addClass('disabled');
		}

		//step 4
		oBtnPrev.click(function(){
			var _i = _settings.index - 1;
			if (_i <= 0) {return;}
			_settings.onChange.apply(this, [_i]);
		});

		oBtnNext.click(function(){
			var _i = _settings.index + 1;
			if(_i > _settings.total){return;}
			_settings.onChange.apply(this, [_i]);
		});

		
	}
})();

调用方法:

html:

<body>
	<div id='pagination'></div>
</body>

js:

<script>
$('#pagination').pagination({
	index:6,
	total:7,
	onChange:function(pageIndex_){
		alert(pageIndex_);
	}
});

</script>



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值