原生js+ajax分頁組件
更新時間:2020年01月30日 10:34:52 作者:一期一會
這篇文章主要為大家詳細介紹了原生js+ajax分頁組件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了js+ajax分頁組件的具體代碼,供大家參考,具體內(nèi)容如下
1.定義分頁組件DOM
<div id="pagination" class="pagination"></div>
2.定義分頁組件類及實例方法:
// 分頁組件類
function Pagination(_ref) {
this.id = _ref.id; //分頁組件掛載的DOM節(jié)點
this.curPage = _ref.curPage || 1; //初始頁碼
this.draw = _ref.draw; // 初始化分頁請求次數(shù)
this.pageSize = _ref.pageSize || 5; //分頁個數(shù)
this.pageLength = _ref.pageLength; //每頁多少條
this.pageTotal = 0; //總共多少頁
this.dataTotal = 0; //總共多少數(shù)據(jù)
this.ajaxParam = _ref.ajaxParam; // 分頁ajax
this.showPageTotalFlag = _ref.showPageTotalFlag || false; //是否顯示數(shù)據(jù)統(tǒng)計
this.showSkipInputFlag = _ref.showSkipInputFlag || false; //是否支持跳轉(zhuǎn)
this.ul = document.createElement('ul');
this.init();
};
// 給實例對象添加公共屬性和方法
Pagination.prototype = {
init: function() {
var pagination = document.getElementById(this.id);
pagination.innerHTML = '';
this.ul.innerHTML = '';
pagination.appendChild(this.ul);
var _this = this;
_this.getPage(_this.curPage)
.then( function( data ){
//首頁
_this.firstPage();
//上一頁
_this.lastPage();
//分頁
_this.getPages().forEach(function (item) {
var li = document.createElement('li');
if (item == _this.curPage) {
li.className = 'active';
} else {
li.onclick = function () {
_this.curPage = parseInt(this.innerHTML);
_this.init();
};
}
li.innerHTML = item;
_this.ul.appendChild(li);
});
//下一頁
_this.nextPage();
//尾頁
_this.finalPage();
//是否支持跳轉(zhuǎn)
if (_this.showSkipInputFlag) {
_this.showSkipInput();
}
//是否顯示總頁數(shù),每頁個數(shù),數(shù)據(jù)
if (_this.showPageTotalFlag) {
_this.showPageTotal();
}
} )
},
// 分頁數(shù)據(jù)請求
getPage: function( curPage ){
var _this = this;
_this.draw++;
return new Promise( function( resolve, reh ){
$.ajax( {
url: _this.ajaxParam.url,
type: _this.ajaxParam.type,
dataType: "json",
data: {
curPage: curPage,
pageLength: 10,
draw: _this.draw
},
success: function(data) {
if( data.isSuccess === true ){
var data = data;
_this.pageTotal = Math.ceil( parseFloat( data.data.totalResult/_this.pageLength ) ),
_this.dataTotal = data.data.totalResult,
_this.draw = data.data.draw;
resolve( data )
}else {
reject( "請求錯誤" )
}
},
error: function(err) {
reject( err )
}
} )
})
},
//首頁
firstPage: function() {
var _this = this;
var li = document.createElement('li');
li.innerHTML = '首頁';
this.ul.appendChild(li);
li.onclick = function () {
var val = parseInt(1);
_this.curPage = val;
_this.init();
};
},
//上一頁
lastPage: function() {
var _this = this;
var li = document.createElement('li');
li.innerHTML = '<';
if (parseInt(_this.curPage) > 1) {
li.onclick = function () {
_this.curPage = parseInt(_this.curPage) - 1;
_this.init();
};
} else {
li.className = 'disabled';
}
this.ul.appendChild(li);
},
//分頁
getPages: function() {
var pag = [];
if (this.curPage <= this.pageTotal) {
if (this.curPage < this.pageSize) {
//當前頁數(shù)小于顯示條數(shù)
var i = Math.min(this.pageSize, this.pageTotal);
while (i) {
pag.unshift(i--);
}
} else {
//當前頁數(shù)大于顯示條數(shù)
var middle = this.curPage - Math.floor(this.pageSize / 2),
//從哪里開始
i = this.pageSize;
if (middle > this.pageTotal - this.pageSize) {
middle = this.pageTotal - this.pageSize + 1;
}
while (i--) {
pag.push(middle++);
}
}
} else {
console.error('當前頁數(shù)不能大于總頁數(shù)');
}
if (!this.pageSize) {
console.error('顯示頁數(shù)不能為空或者0');
}
return pag;
},
//下一頁
nextPage: function() {
var _this = this;
var li = document.createElement('li');
li.innerHTML = '>';
if (parseInt(_this.curPage) < parseInt(_this.pageTotal)) {
li.onclick = function () {
_this.curPage = parseInt(_this.curPage) + 1;
_this.init();
};
} else {
li.className = 'disabled';
}
this.ul.appendChild(li);
},
//尾頁
finalPage: function() {
var _this = this;
var li = document.createElement('li');
li.innerHTML = '尾頁';
this.ul.appendChild(li);
li.onclick = function () {
var yyfinalPage = _this.pageTotal;
var val = parseInt(yyfinalPage);
_this.curPage = val;
_this.init();
};
},
//是否支持跳轉(zhuǎn)
showSkipInput: function() {
var _this = this;
var li = document.createElement('li');
li.className = 'totalPage';
var span1 = document.createElement('span');
span1.innerHTML = '跳轉(zhuǎn)到';
li.appendChild(span1);
var input = document.createElement('input');
input.setAttribute("type","number");
input.onkeydown = function (e) {
var oEvent = e || event;
if (oEvent.keyCode == '13') {
var val = parseInt(oEvent.target.value);
if (typeof val === 'number' && val <= _this.pageTotal && val>0) {
_this.curPage = val;
}else{
alert("請輸入正確的頁數(shù) !")
}
_this.init();
}
};
li.appendChild(input);
var span2 = document.createElement('span');
span2.innerHTML = '頁';
li.appendChild(span2);
this.ul.appendChild(li);
},
//是否顯示總頁數(shù),每頁個數(shù),數(shù)據(jù)
showPageTotal: function() {
var _this = this;
var li = document.createElement('li');
li.innerHTML = '共 ' + _this.pageTotal + ' 頁';
li.className = 'totalPage';
this.ul.appendChild(li);
var li2 = document.createElement('li');
li2.innerHTML = '每頁 ' + _this.pageLength + ' 條';
li2.className = 'totalPage';
this.ul.appendChild(li2);
var li3 = document.createElement('li');
li3.innerHTML = '共 ' + _this.dataTotal + ' 條數(shù)據(jù)';
li3.className = 'totalPage';
this.ul.appendChild(li3);
var li4 = document.createElement('li');
li4.innerHTML = _this.curPage + "/" + _this.pageTotal;
li4.className = 'totalPage';
this.ul.appendChild(li4);
}
};
3.實例化分頁組件
let pageInstance = new Pagination({
id: 'pagination',
curPage:1, // 初始頁碼,不填默認為1
draw: 0, // 當前渲染次數(shù)統(tǒng)計
pageLength: 10, //每頁多少條
pageSize: 5, //分頁個數(shù),不填默認為5
showPageTotalFlag:true, //是否顯示數(shù)據(jù)統(tǒng)計,不填默認不顯示
showSkipInputFlag:true, //是否支持跳轉(zhuǎn),不填默認不顯示
ajaxParam: { //分頁ajax
url: 'https://www.easy-mock.com/mock/5cc6fb7358e3d93eff3d812c/page',
type: "get",
}
})
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:
- 使用bootstrap-paginator.js 分頁來進行ajax 異步分頁請求示例
- Javascript vue.js表格分頁,ajax異步加載數(shù)據(jù)
- vue.js 表格分頁ajax 異步加載數(shù)據(jù)
- js實現(xiàn)ajax分頁完整實例
- 使用Jquery+Ajax+Json如何實現(xiàn)分頁顯示附JAVA+JQuery實現(xiàn)異步分頁
- Jquery+Ajax+Json+存儲過程實現(xiàn)高效分頁
- 基于Jquery+Ajax+Json實現(xiàn)分頁顯示附效果圖
- asp.net中利用Jquery+Ajax+Json實現(xiàn)無刷新分頁的實例代碼
- javascript ajax 仿百度分頁函數(shù)
- 基于Jquery+Ajax+Json的高效分頁實現(xiàn)代碼
相關(guān)文章
JavaScript中instanceof運算符的用法總結(jié)
這篇文章主要是對JavaScript中instanceof運算符的用法進行了詳細的總結(jié)介紹,需要的朋友可以過來參考下,希望對大家有所幫助2013-11-11
基于代數(shù)方程庫Algebra.js解二元一次方程功能示例
這篇文章主要介紹了基于代數(shù)方程庫Algebra.js解二元一次方程功能,結(jié)合具體實例形式分析了方程庫Algebra.js計算方程的具體使用技巧,需要的朋友可以參考下2017-06-06

