如何在前端实现分页功能 - 前端分页功能封装
功能封装
define(function(require, exports, module) {
let pagenationByfe = {
createBtns:function ($dom , totalPage , current) {
debugger
var tempStr = "";
if (current > 1) {
tempStr += "<span class='btn first' href=\"#\" data-page = '1'>首页</span>";
tempStr += "<span class='btn prepage' href=\"#\" data-page = "+(current-1)+">上一页</span>"
}
for(var pageIndex= 1 ; pageIndex < totalPage+1; pageIndex++){
if (pageIndex == current){
tempStr += "<a class='btn pageAct page"+pageIndex+"' data-page = "+( pageIndex )+"><span>"+ pageIndex +"</span></a>";
} else {
tempStr += "<a class='btn page"+pageIndex+"' data-page = "+( pageIndex )+"><span>"+ pageIndex +"</span></a>";
}
}
if (current < totalPage) {
tempStr += "<span class='btn nextpage' href=\"#\" data-page = "+(current+1)+">下一页</span>";
tempStr += "<span class='btn last' href=\"#\" data-page = "+ (totalPage) +">尾页</span>";
}
if (totalPage != 1){
document.getElementById($dom).innerHTML = tempStr;
}else {
document.getElementById($dom).innerHTML="";
}
},
bindClick:function(perPage ,pages , $tbodyDom , $btnDom){
var buttonArr = ['.first','.last','.prepage','.nextpage'];
for(var k in buttonArr){
var $dom = buttonArr[k];
$('body').delegate( $dom , 'click' , function () {
let data = $(this).data('page');
pagenationByfe.pagination(perPage , data ,$tbodyDom , $btnDom );
$('.page'+data).css({background:'#16599f',color:'#fff'});
})
}
for (var k = 1 ;k <= pages ; k++){
var $singleDom = '.page'+k;
$('body').delegate( $singleDom , 'click' , function () {
let data = $(this).data('page');
pagenationByfe.pagination(perPage , data ,$tbodyDom , $btnDom);
$('.page'+data).css({background:'#16599f',color:'#fff'});
})
}
},
pagination:function(perPage , current , $dom , $btnDom){
debugger
var tableData = document.getElementById($dom);
var rows = tableData.rows.length;
var totalPage = 0;
var pageSize = perPage;
if (rows/pageSize > parseInt(rows/pageSize)){
totalPage = parseInt(rows/pageSize)+1;
}else{
totalPage = parseInt(rows/pageSize);
}
var currentPage = current;
var startRow = (currentPage - 1)*pageSize+1;
var endRow = (currentPage*pageSize > rows ? rows : currentPage*pageSize);
for(var i = 1 ; i < (rows+1) ; i++){
var realRow = tableData.rows[i-1];
if (i>=startRow && i<=endRow) {
realRow.style.display='table-row';
}else{
realRow.style.display='none';
}
}
this.createBtns( $btnDom ,totalPage , current);
},
init:function (options) {
let perPage = options.perPage || 10,
currentPage = options.currentPage || 1,
$tbodyId = options.$tbodyId ,
$barconId = options.$barconId,
pages = options.pages;
this.pagination(perPage , currentPage , $tbodyId , $barconId);
this.bindClick(perPage , pages , $tbodyId , $barconId);
}
}
return pagenationByfe;
})
情景使用
pagenationByfe.init({
perPage:10,
currentPage:1,
$tbodyId:"vulTable_data",
$barconId:"barcon_vulInfo",
pages:res.vulInfo.length/10 > parseInt(res.vulInfo.length/10)?parseInt(res.vulInfo.length/10)+1:parseInt(res.vulInfo.length/10)
})