基于原生JS實(shí)現(xiàn)分頁效果的示例代碼
這個(gè)只是一個(gè)分頁的demo,主要是思路整理(很久之前項(xiàng)目用的東西)
分頁實(shí)現(xiàn)的效果 主要是 左側(cè)上一頁 右側(cè)是下一頁 中間顯示主要是超過5個(gè)顯示 省略號(hào) 然后是可配置選項(xiàng)
實(shí)現(xiàn)之后的效果

首先需要初始化該對(duì)象的一些基本屬性,顯示總頁碼數(shù),中間顯示的頁面數(shù), 添加一個(gè)回調(diào)函數(shù),在頁面變化激活回調(diào)函數(shù)并返回當(dāng)前頁面和一些需要的其他參數(shù) init為對(duì)象初始化的方法(里面的參數(shù)都是可以寫成活的,我這里偷懶了所以寫成死的了) 這個(gè)里的 z_page 可以接是接口返回的總頁數(shù)
function Page(obj) {
this.obj = obj||{page:1,page_count: 0};
this.z_page = 7; // 一共顯示的頁碼數(shù)
this.show_page = this.z_page-2; // 中間顯示多少個(gè)頁碼 必須是個(gè)基數(shù)好看
this.fn = this.obj.block;
this.init()
}在init在初始化方法里主要是判斷
1 總頁數(shù)是否小于顯示頁面(這個(gè)主要是判斷是否顯示省略號(hào),添加省略號(hào)比較麻煩,這個(gè)是總頁數(shù)少不用添加)
2 當(dāng)前頁面數(shù)+左右顯示的平均數(shù)(show_page/2-1)+1和總頁面相比 這個(gè)主要判斷省略號(hào)在前面的問題(靠近尾頁)前面有省略號(hào)

3 左右顯示的平均數(shù)(show_page/2-1)+2(最前面1 和最后的書)大于當(dāng)前頁面數(shù)(靠近首頁)
第一個(gè)圖片(后面有省略號(hào))
4 剩下的狀態(tài)就是中間狀態(tài)(兩側(cè)有省略號(hào))

這個(gè)判斷其實(shí)也是要判斷咱們分頁的邊界條件,如果這個(gè)想好了并且實(shí)現(xiàn)了 相當(dāng)于就完成了一半 初始化方法的最后是要給上一頁和下一頁,有數(shù)字的頁簽 添加點(diǎn)擊事件 并且做相應(yīng)邏輯處理 代碼的實(shí)現(xiàn)
Page.prototype.create = function () {
// page:1 page_count 17
// 保證被點(diǎn)擊的頁數(shù)在中間
var ping = (this.show_page-1)/2; // 左右顯示的平均數(shù) 在中間
var num = this.obj.page-ping; // 最小頁碼
var endnum = (this.obj.page+ping)>this.obj.page_count?this.obj.page_count:(this.obj.page+ping) // 最大頁碼
console.log(endnum);
var pageID = document.getElementById('pageID');
var self= this;
pageID.innerHTML = '';
num = num<1?1:num;
if (this.obj.page_count<= this.z_page) {
alert('smallPage');
this.smallPage()
} else if( (this.obj.page+ping+1)>=this.obj.page_count) {// 還要加上最后一個(gè) 接近尾頁
pageID.appendChild(this.nearBack())
console.log('尾巴')
} else if ((ping+2)>=(this.obj.page)) { //3 接近首頁
pageID.appendChild( this.nearHome())
console.log('臨近首頁')
}else {
console.log(num,endnum);
pageID.appendChild(this.centerPage(num,endnum));
}
document.onclick = function (event) {
switch (event.target.className) {
case 'previous':
self._previous();
break;
case 'next':
self._next();
break;
default:
self.clickLi(event.target);
}
self.fn(self.obj.page)
}
};剩下的就是只想邏輯和dom操作了 因?yàn)槭怯玫脑鷍s,這里是用的文檔碎片,把我生成的dom全部都放到文檔碎片里,然后一次性返出來 直接append到body上 這個(gè)是我的方法代碼
Page.prototype.nearBack = function () {
var oFragmeng = document.createDocumentFragment(); // 創(chuàng)建了一個(gè)文檔碎片
var ul = document.createElement('ul')
var Div = oFragmeng.appendChild(ul);
Div.innerHTML = '<li>1</li><li>....</li>';
for (var m=(this.obj.page_count- this.show_page);m<=this.obj.page_count;m++) {
var li1 = document.createElement('li');
li1.innerHTML = m;
if (m===this.obj.page) {
li1.className = 'active'
}
Div.appendChild(li1)
}
return oFragmeng.firstChild;
};總結(jié):分頁 也會(huì)和你實(shí)現(xiàn)的分頁效果不同,實(shí)現(xiàn)方式也有區(qū)別,但是核心思想是一樣的。
到此這篇關(guān)于基于原生JS實(shí)現(xiàn)分頁效果的示例代碼的文章就介紹到這了,更多相關(guān)JS分頁效果內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用原生js實(shí)現(xiàn)頁面蒙灰(mask)效果示例代碼
像js的框架Extjs的mask()和unmask()功能提供了蒙灰效果,當(dāng)然jquery也提供了這種蒙灰方法,下面有個(gè)示例,大家可以參考下2014-06-06
JS 操作Array數(shù)組的方法及屬性實(shí)例解析
本篇文章主要是對(duì)JS操作Array數(shù)組的方法及屬性進(jìn)行了詳細(xì)的介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助2014-01-01
微信小程序?qū)崿F(xiàn)簡(jiǎn)單計(jì)算器功能
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)簡(jiǎn)單計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07
javascript數(shù)字驗(yàn)證的實(shí)例代碼(推薦)
下面小編就為大家?guī)硪黄猨avascript數(shù)字驗(yàn)證的實(shí)例代碼(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-08-08
使用webpack搭建vue項(xiàng)目實(shí)現(xiàn)腳手架功能
這篇文章主要介紹了使用webpack搭建vue項(xiàng)目實(shí)現(xiàn)腳手架功能,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03
微信小程序開發(fā)報(bào):“app.json未找到”錯(cuò)誤的原因與解決方法
這篇文章主要介紹了微信小程序開發(fā)中常見的“app.json文件內(nèi)容錯(cuò)誤”及其解決方案,錯(cuò)誤通常由核心文件路徑錯(cuò)誤或配置問題引起,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-03-03
使用layer彈窗和layui表單實(shí)現(xiàn)新增功能
最近做項(xiàng)目遇到這樣的需求使用layer在彈窗內(nèi)完成新增,成功后提示并刷新頁面,下面小編給大家?guī)砹耸褂胠ayer彈窗和layui表單做新增功能,具體實(shí)現(xiàn)代碼,參考下本文2018-08-08
JavaScript中的數(shù)組遍歷forEach()與map()方法以及兼容寫法介紹
下面小編就為大家?guī)硪黄狫avaScript中的數(shù)組遍歷forEach()與map()方法以及兼容寫法介紹。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-05-05

