You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

155 lines
4.8 KiB
JavaScript

7 months ago
/**
* 分页功能
* @author LiuHuiYu
* Created DateTime 2021-02-07 10:09
* @param property {showFirstPage,showLastPage,parentDiv,outerDiv,outPage,goPageEvent}
* @return
*/
function ProgPaging(property) {
let baseProperty = {
/**
* 显示首页
*/
showFirstPage: true,
/**
* 显示末页
*/
showLastPage: true,
/**
* 分页上级节点如果没有默认是body
*/
parentDiv: null,
/**
* 分页Dom
*/
outerDiv: null,
/**
* 输出函数
* 参数页面索引是否是当前页是否是首页是否是末页
*/
outPage: setPage,
/**
* 跳转事件函数
*/
goPageEvent: goPage,
};
Object.assign(baseProperty, property);
/**
* 设置更新分页页面
* @param index 当前索引
* @param isNowPage 是否是当前页面
* @param isFirst 是否是第一页
* @param isLast 是否是最后一页
*/
function setPage(index, isNowPage, isFirst, isLast) {
let li = document.createElement("li");
if (!isNowPage) {
(function (index) {
//监听点击事件 object比如google地图中的Maker对象
li.addEventListener("click", function () {
baseProperty.goPageEvent(index); //调用方法
});
})(index);
}
if (isNowPage) {
li.innerHTML = '(' + (index + 1) + ')';
}
else if (isFirst) {
li.innerHTML = '首页';
}
else if (isLast) {
li.innerHTML = '末页';
}
else {
li.innerHTML = (index + 1);
}
baseProperty.outerDiv.appendChild(li);
}
function goPage(index) {
console.info("跳转" + index);
}
/**
* 功能描述
* @author LiuHuiYu
* Created DateTime 2021-02-07 10:15
* @param countPageNum 总页数
* @param nowPageIndex 当前页索引0开始
* @param showPageNum 显示页面数量(最少显示3页)
* @param property 更新设定参数
* @return
*/
this.showPage = function page(countPageNum, nowPageIndex, showPageNum, property) {
Object.assign(baseProperty, property);
//region 异常数据处理
if (countPageNum <= 1) {
//不显示
return;
}
if (showPageNum < 3) {
showPageNum = 3;
}
//页面异常数据处理
if (nowPageIndex < 0) {
nowPageIndex = 0;
}
else if (nowPageIndex > countPageNum - 1) {
nowPageIndex = countPageNum - 1
}
if (showPageNum > countPageNum) {
showPageNum = countPageNum;
}
//endregion
//显示页面的中间位置//取丢弃小数部分,保留整数部分
let halfAmount = Math.ceil((showPageNum - 1) / 2);
let amendmentsNum = (showPageNum + 1) % 2;
let frontNumber, afterNumber;
//当前页面位置判断。
if (nowPageIndex <= halfAmount) {
frontNumber = nowPageIndex;
afterNumber = showPageNum - 1 - frontNumber;
}
else if ((countPageNum - nowPageIndex - 1) <= halfAmount) {
afterNumber = countPageNum - nowPageIndex - 1;
frontNumber = showPageNum - 1 - afterNumber;
}
else {
if (countPageNum / 2 > nowPageIndex) {
frontNumber = halfAmount + amendmentsNum;
afterNumber = showPageNum - 1 - frontNumber;
}
else {
afterNumber = halfAmount + amendmentsNum;
frontNumber = showPageNum - 1 - afterNumber;
}
}
if (baseProperty.parentDiv == null) {
baseProperty.parentDiv = document.createElement("div");
document.body.append(baseProperty.parentDiv);
}
if (baseProperty.outerDiv == null) {
baseProperty.outerDiv = document.createElement("lu");
baseProperty.parentDiv.appendChild(baseProperty.outerDiv);
}
baseProperty.outerDiv.innerHTML = '';
if ((nowPageIndex - frontNumber) > 0) {
setPage(0, (nowPageIndex === 0), true, false);
}
for (let i = frontNumber; i > 0; i--) {
setPage(nowPageIndex - i, false, false, false);
}
setPage(nowPageIndex, true, false, false);
for (let i = 0; i < afterNumber; i++) {
setPage(nowPageIndex + i + 1, false, false, false);
}
if ((nowPageIndex + afterNumber) < countPageNum - 1) {
setPage(countPageNum - 1, (nowPageIndex === (countPageNum - 1)), false, true);
}
}
}