原生js编写基于面向对象的分页组件
本文实例为大家分享了一个基于面向对象的分页组件的具体实现代码,供大家参考,具体内容如下
文字表达有限,直接上代码了
<!DOCTYPEhtml>
<html>
<head>
<metacharset="UTF-8">
<title>一个基于面向对象的分页组件</title>
<style>
html,body{padding:0;margin:0;}
p{padding:0;margin:0;}
a{text-decoration:none}
.Paging{overflow:hidden;}
.Paging-item{float:left;padding:10px15px;background:#4caf50;color:#fff;margin-left:5px;}
.Paging-item-active{background:#ff568e;}
</style>
</head>
<body>
<divid="page"></div>
</body>
<script>
//分页组件类
functionPaging(container,opt){
//自定义事件
this.eventHandlers={};
//默认设置
this.config={
nowNum:1,
allNum:10,
callback:function(){}
}
if(opt){
this.extend(this.config,opt);
}
//外层容器
this.Box=null;
//渲染组件
this.render(container);
}
Paging.prototype={
constructor:Paging,
/*绑定自定义事件*/
on:function(eventType,eventHandler){
if(typeofthis.eventHandlers[eventType]==='undefined'){
this.eventHandlers[eventType]=[];
}
this.eventHandlers[eventType].push(eventHandler);
},
/*触发自定义事件*/
fire:function(eventType){
if(this.eventHandlers[eventType]instanceofArray){
varlen=this.eventHandlers[eventType].length;
for(vari=0;i<len;i++){
this.eventHandlers[eventType][i]();
}
}
},
/*渲染UI结构*/
renderUI:function(){
this.Box=document.createElement('div');
this.Box.className='Paging';
varnowNum=this.config.nowNum;
varallNum=this.config.allNum;
//当前页大于或等于4,第一页才能隐藏,总数大于5才能显示首页
if(nowNum>=4&&allNum>=6){
varpageA=document.createElement('a');
pageA.className='Paging-itemPaging-item-start'
pageA.href='#1';
pageA.innerHTML='首页';
this.Box.appendChild(pageA);
};
//当前页只要不是第一页就显示上一页
if(nowNum>=2){
varpageA=document.createElement('a');
pageA.className='Paging-itemPaging-item-pre'
pageA.href='#'+(nowNum-1);
pageA.innerHTML='上一页';
this.Box.appendChild(pageA);
}
//只有5页时
if(allNum<=5){
for(vari=1;i<=allNum;i++){
varpageA=document.createElement('a');
pageA.className='Paging-item'
pageA.href='#'+i;
if(nowNum==i){
pageA.className='Paging-itemPaging-item-active'
pageA.innerHTML=i;
}else{
//pageA.innerHTML='['+i+']';
pageA.innerHTML=i;
}
this.Box.appendChild(pageA);
}
}else{
for(vari=1;i<=5;i++){
varpageA=document.createElement('a');
pageA.className='Paging-item'
pageA.href='#'+(nowNum-3+i);
//对当前页为前2页的处理
if(nowNum===1||nowNum===2){
pageA.href='#'+i;
if(nowNum===i){
pageA.className='Paging-itemPaging-item-active'
pageA.innerHTML=i;
}else{
//pageA.innerHTML='['+i+']';
pageA.innerHTML=i;
}
}/*对当前页为后2页的处理*/elseif((allNum-nowNum)===0||(allNum-nowNum)===1){
/*==
<ahref="">[6]</a>
<ahref="">[7]</a>
<ahref="">[8]</a>
<ahref="">[9]</a>
<ahref="">10</a>
==*/
pageA.href='#'+((allNum-5)+i);
if((allNum-nowNum)===0&&i===5){
pageA.className='Paging-itemPaging-item-active'
pageA.innerHTML=((allNum-5)+i);
}elseif((allNum-nowNum)===1&&i===4){
pageA.className='Paging-itemPaging-item-active'
pageA.innerHTML=((allNum-5)+i);
}else{
//pageA.innerHTML='['+((allNum-5)+i)+']'
pageA.innerHTML=((allNum-5)+i)
}
}else{
if(nowNum===(nowNum-3+i)){
pageA.className='Paging-itemPaging-item-active'
pageA.innerHTML=(nowNum-3+i);
}else{
//pageA.innerHTML='['+(nowNum-3+i)+']'
pageA.innerHTML=(nowNum-3+i)
}
}
this.Box.appendChild(pageA);
}
}
if((allNum-nowNum)>=1){
varpageA=document.createElement('a');
pageA.className='Paging-itemPaging-item-next'
pageA.href='#'+(nowNum+1);
pageA.innerHTML='下一页';
this.Box.appendChild(pageA);
}
//选择7为标准,或7以下才能显示
if((allNum-nowNum)>=3&&allNum>=6){
varpageA=document.createElement('a');
pageA.className='Paging-itemPaging-item-end'
pageA.href='#'+allNum;
pageA.innerHTML='尾页';
this.Box.appendChild(pageA);
}
},
/*为UI绑定事件*/
bindUI:function(){
varself=this;
this.config.callback(this.config.nowNum,this.config.allNum);
//利用事件委托
self.Box.onclick=function(e){
vare=e||window.event;
vartarget=e.target||e.srcElement;
if(typeofe.target.getAttribute('href')==='string'){
varnowNum=parseInt(target.getAttribute('href').substring(1));
//console.log(nowNum);
self.Box.innerHTML='';
newPaging(null,{
nowNum:nowNum,
allNum:self.config.allNum,
callback:self.config.callback
})
}
returnfalse;
}
},
/*渲染UI*/
render:function(container){
this.renderUI();
this.bindUI();
if(container){
varcon=document.getElementById(container);
con.appendChild(this.Box);
}else{
document.body.appendChild(this.Box);
}
},
/*继承对象*/
extend:function(obj1,obj2){
for(attrinobj2){
obj1[attr]=obj2[attr];
}
}
}
//初始化调用
varpage=newPaging(null,{
nowNum:1,
allNum:10,
callback:function(nowNum,allNum){
console.log('当前页:'+nowNum)
console.log('总页:'+allNum)
}
});
</script>
</html>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。