原生js編寫(xiě)基于面向?qū)ο蟮姆猪?yè)組件
本文實(shí)例為大家分享了一個(gè)基于面向?qū)ο蟮姆猪?yè)組件的具體實(shí)現(xiàn)代碼,供大家參考,具體內(nèi)容如下
文字表達(dá)有限,直接上代碼了
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>一個(gè)基于面向?qū)ο蟮姆猪?yè)組件</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: 10px 15px;background: #4caf50;color: #fff;margin-left: 5px;}
.Paging-item-active{background: #ff568e;}
</style>
</head>
<body>
<div id="page"></div>
</body>
<script>
//分頁(yè)組件類
function Paging(container,opt){
//自定義事件
this.eventHandlers={};
//默認(rèn)設(shè)置
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(typeof this.eventHandlers[eventType] === 'undefined'){
this.eventHandlers[eventType]= [];
}
this.eventHandlers[eventType].push(eventHandler);
},
/*觸發(fā)自定義事件*/
fire: function(eventType){
if( this.eventHandlers[eventType] instanceof Array){
var len= this.eventHandlers[eventType].length;
for(var i=0;i<len;i++){
this.eventHandlers[eventType][i]();
}
}
},
/*渲染UI結(jié)構(gòu)*/
renderUI: function(){
this.Box= document.createElement('div');
this.Box.className= 'Paging';
var nowNum= this.config.nowNum;
var allNum= this.config.allNum;
//當(dāng)前頁(yè)大于或等于4,第一頁(yè)才能隱藏,總數(shù)大于5才能顯示首頁(yè)
if (nowNum >=4 && allNum >=6) {
var pageA= document.createElement('a');
pageA.className= 'Paging-item Paging-item-start'
pageA.href='#1';
pageA.innerHTML= '首頁(yè)';
this.Box.appendChild(pageA);
};
//當(dāng)前頁(yè)只要不是第一頁(yè)就顯示上一頁(yè)
if(nowNum>=2){
var pageA= document.createElement('a');
pageA.className= 'Paging-item Paging-item-pre'
pageA.href='#'+ (nowNum-1);
pageA.innerHTML= '上一頁(yè)';
this.Box.appendChild(pageA);
}
//只有5頁(yè)時(shí)
if(allNum<=5){
for(var i=1;i<=allNum;i++){
var pageA= document.createElement('a');
pageA.className= 'Paging-item'
pageA.href= '#'+ i;
if(nowNum==i){
pageA.className= 'Paging-item Paging-item-active'
pageA.innerHTML=i;
}else{
// pageA.innerHTML='['+ i +']';
pageA.innerHTML=i;
}
this.Box.appendChild(pageA);
}
}else{
for(var i=1;i<=5;i++){
var pageA= document.createElement('a');
pageA.className= 'Paging-item'
pageA.href= '#'+ (nowNum-3+i);
//對(duì)當(dāng)前頁(yè)為前2頁(yè)的處理
if(nowNum === 1 || nowNum === 2){
pageA.href= '#'+ i;
if(nowNum === i){
pageA.className= 'Paging-item Paging-item-active'
pageA.innerHTML= i;
}else{
// pageA.innerHTML= '['+i+']';
pageA.innerHTML= i;
}
}/*對(duì)當(dāng)前頁(yè)為后2頁(yè)的處理*/else if((allNum-nowNum) ===0 || (allNum-nowNum) === 1){
/*==
<a href="">[6]</a>
<a href="">[7]</a>
<a href="">[8]</a>
<a href="">[9]</a>
<a href="">10</a>
==*/
pageA.href= '#'+ ((allNum-5)+i);
if((allNum-nowNum) ===0 && i===5){
pageA.className= 'Paging-item Paging-item-active'
pageA.innerHTML=((allNum-5)+i);
}else if((allNum-nowNum) ===1 && i===4){
pageA.className= 'Paging-item Paging-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-item Paging-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){
var pageA= document.createElement('a');
pageA.className= 'Paging-item Paging-item-next'
pageA.href='#'+ (nowNum+1);
pageA.innerHTML= '下一頁(yè)';
this.Box.appendChild(pageA);
}
//選擇7為標(biāo)準(zhǔn),或7以下才能顯示
if((allNum-nowNum) >= 3 && allNum >= 6){
var pageA= document.createElement('a');
pageA.className= 'Paging-item Paging-item-end'
pageA.href='#'+allNum;
pageA.innerHTML= '尾頁(yè)';
this.Box.appendChild(pageA);
}
},
/*為UI綁定事件*/
bindUI: function(){
var self= this;
this.config.callback(this.config.nowNum,this.config.allNum);
//利用事件委托
self.Box.onclick= function(e){
var e= e || window.event;
var target= e.target || e.srcElement;
if(typeof e.target.getAttribute('href') === 'string'){
var nowNum= parseInt(target.getAttribute('href').substring(1));
// console.log(nowNum);
self.Box.innerHTML= '';
new Paging(null,{
nowNum: nowNum,
allNum: self.config.allNum,
callback: self.config.callback
})
}
return false;
}
},
/*渲染UI*/
render: function(container){
this.renderUI();
this.bindUI();
if(container){
var con= document.getElementById(container);
con.appendChild(this.Box);
}else{
document.body.appendChild(this.Box);
}
},
/*繼承對(duì)象*/
extend: function(obj1,obj2){
for(attr in obj2){
obj1[attr]= obj2[attr];
}
}
}
//初始化調(diào)用
var page= new Paging(null,{
nowNum: 1,
allNum: 10,
callback: function(nowNum,allNum){
console.log('當(dāng)前頁(yè):'+nowNum)
console.log('總頁(yè):'+allNum)
}
});
</script>
</html>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Vue.js分頁(yè)組件實(shí)現(xiàn):diVuePagination的使用詳解
- vuejs2.0實(shí)現(xiàn)分頁(yè)組件使用$emit進(jìn)行事件監(jiān)聽(tīng)數(shù)據(jù)傳遞的方法
- angularjs使用directive實(shí)現(xiàn)分頁(yè)組件的示例
- Reactjs實(shí)現(xiàn)通用分頁(yè)組件的實(shí)例代碼
- Vue.js實(shí)現(xiàn)一個(gè)自定義分頁(yè)組件vue-paginaiton
- 使用vue.js制作分頁(yè)組件
- 基于Vue.js的表格分頁(yè)組件
- js多功能分頁(yè)組件layPage使用方法詳解
- 分享一個(gè)自己寫(xiě)的簡(jiǎn)單的javascript分頁(yè)組件
- JavaScript分頁(yè)組件使用方法詳解
相關(guān)文章
詳細(xì)聊聊對(duì)async/await的理解和用法
隨著Nodev7的發(fā)布,越來(lái)越多的人開(kāi)始研究據(jù)說(shuō)是異步編程終級(jí)解決方案的 async/await,這篇文章主要給大家介紹了關(guān)于對(duì)async/await的理解和用法,文中通過(guò)實(shí)例代碼介紹的介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07
JS數(shù)組降維的實(shí)現(xiàn)Array.prototype.concat.apply([], arr)
這篇文章主要介紹了JS數(shù)組降維的實(shí)現(xiàn)Array.prototype.concat.apply([], arr),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
JavaScript簡(jiǎn)單生成 N~M 之間隨機(jī)數(shù)的方法
這篇文章主要介紹了JavaScript簡(jiǎn)單生成 N~M 之間隨機(jī)數(shù)的方法,結(jié)合自定義函數(shù)分析了JS生成固定區(qū)間內(nèi)隨機(jī)數(shù)的相關(guān)操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2017-01-01
Bootstrap按鈕組簡(jiǎn)單實(shí)現(xiàn)代碼
這篇文章主要為大家詳細(xì)介紹了Bootstrap按鈕組的簡(jiǎn)單實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03
JavaScript實(shí)現(xiàn)基礎(chǔ)排序算法的示例詳解
這篇文章主要為大家詳細(xì)介紹了如何利用JavaScript實(shí)現(xiàn)基礎(chǔ)排序算法,如:冒泡排序、選擇排序、插入排序和快速排序,感興趣的可以了解一下2022-06-06
在JavaScript中監(jiān)聽(tīng)I(yíng)ME鍵盤(pán)輸入事件
在 JavaScript 中監(jiān)聽(tīng)用戶的鍵盤(pán)輸入是很容易的事情,但用戶一旦使用了輸入法,問(wèn)題就變得復(fù)雜了。2011-05-05
微信小程序?qū)崿F(xiàn)MUI數(shù)字輸入框效果
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)MUI數(shù)字輸入框效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01

