原生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è)組件類(lèi)
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)文章
input file上傳 圖片預(yù)覽功能實(shí)例代碼
input file上傳圖片預(yù)覽其實(shí)很簡(jiǎn)單。今天小編就通過(guò)本文給大家介紹input file上傳 圖片預(yù)覽功能的實(shí)現(xiàn)代碼,比較簡(jiǎn)單,對(duì)input file 上傳預(yù)覽功能感興趣的朋友參考下吧2016-10-10
如何在js代碼中消滅for循環(huán)實(shí)例詳解
for循環(huán)對(duì)大家來(lái)說(shuō)都不陌生,下面這篇文章主要給大家介紹了關(guān)于如何在js代碼中消滅for循環(huán)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07
JS截取url中問(wèn)號(hào)后面參數(shù)的值信息
JS截取url獲取一些信息類(lèi)似的文章可以在網(wǎng)上找很多,本文在重復(fù)講述一遍,有不會(huì)的朋友可以鞏固一下2014-04-04
關(guān)于JavaScript中var聲明變量作用域的推斷
這個(gè)問(wèn)題其實(shí)之前困擾了我很久。如今終于想明白了,特來(lái)分享,如果有錯(cuò)誤的地方,請(qǐng)幫忙指正,我會(huì)隨時(shí)回來(lái)修正滴。2010-12-12
基于javascript 顯式轉(zhuǎn)換與隱式轉(zhuǎn)換(詳解)
下面小編就為大家分享一篇基于javascript 顯式轉(zhuǎn)換與隱式轉(zhuǎn)換(詳解),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12
微信小程序?qū)崿F(xiàn)自定義加載圖標(biāo)功能
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)自定義加載圖標(biāo)功能,非常不錯(cuò)具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2018-07-07
JavaScript高仿支付寶倒計(jì)時(shí)頁(yè)面及代碼實(shí)現(xiàn)
在支付寶上我們經(jīng)常會(huì)見(jiàn)到支付寶倒計(jì)時(shí)功能,倒計(jì)時(shí)應(yīng)用非常廣泛,下文給大家介紹js制作支付寶倒計(jì)時(shí)功能,但是里面涉及到,倒計(jì)時(shí),彈框,以及字體圖的相關(guān)知識(shí),感興趣的朋友一起看看吧2016-10-10

