Files
sdk4.0/src/Obj/Element/Pagination.js

141 lines
4.7 KiB
JavaScript
Raw Normal View History

2025-07-03 13:54:01 +08:00
function generatePagination(pagination, total, pageSize, pageIndex, cd) {
/*
需要一个<ul id="pagination"></ul>
total; // 总数据的数量
pageSize; // 一页显示数量
pageIndex; // 当前页
*/
let totalPage = Math.ceil(total / pageSize) || 1; // 总页数
function initPagination() {
let pageHtml; // 按钮内容
let prevButton = `<li class='list-items lbl btnPrev'></li>`; // 向左
let nextButton = `<li class='list-items lbr btnNext'></li>`; // 向右
let firstPage = `<li class='list-items' pagenumber=1>1</li>`; // 第一页
let lastPage = `<li class='list-items' pagenumber=${totalPage}>${totalPage}</li>`; // 最后一页
let leftOmitPage = `<li class='list-items btnGoLeft'>...</li>`; // 省略号
let rightOmitPage = `<li class='list-items btnGoRight'>...</li>`; // 省略号
let pageTips = `<div style='line-height:20px;' class='pageTips'>共 ${total} 条</div > `;
pageHtml = prevButton; // 添加向左的按钮
/* 生成页数 */
if (totalPage <= 6) {
// 总页数小于等于10页全部显示
for (let i = 1; i <= totalPage; i++) {
pageHtml += `<li class='list-items' pagenumber=${i}>${i}</li>`;
}
}
//页码大于5页的情况 当前页大于5的话并且页码是大于11页的
else if (pageIndex <= 4) {
//总页数大于10且当前页远离总页数
for (let i = 1; i <= 5; i++) {
pageHtml += `<li class='list-items' pagenumber=${i}>${i}</li>`;
}
pageHtml += rightOmitPage;
pageHtml += lastPage;
} else if (pageIndex > totalPage - 3) {
//pageindex>=9 的时候并且页数》10页的时候
// console.log('totalPage - 2:' + (totalPage - 3));
// console.log('pageindex:' + pageIndex);
//总页数大于10且当前页接近总页数
pageHtml += firstPage;
pageHtml += leftOmitPage;
for (let i = totalPage - 4; i <= totalPage; i++) {
pageHtml += `<li class='list-items' pagenumber=${i}>${i}</li>`;
}
} else {
//除开上面两个情况 当前页在中间
pageHtml += firstPage;
pageHtml += leftOmitPage;
for (let i = pageIndex - 1; i <= pageIndex + 1; i++) {
pageHtml += `<li class='list-items' pagenumber=${i}>${i}</li>`;
}
pageHtml += rightOmitPage;
pageHtml += lastPage;
}
pageHtml += nextButton; // 添加向右的按钮
pageHtml += pageTips;
pagination.innerHTML = pageHtml;
pagination
.querySelector("li[pagenumber='" + pageIndex + "']")
.classList.add('active');
let pagenumberBtns = pagination.querySelectorAll('li[pagenumber]'); // 获取所有的页码按钮
/* 点击页码按钮进行翻页 */
pagenumberBtns.forEach(function (elements) {
elements.onclick = function () {
pageIndex = Number(this.innerHTML); // 当前页
pagination
.querySelector("li[pagenumber='" + pageIndex + "']")
.classList.add('active');
pageHtml = ``;
initPagination()
cd && cd(pageIndex)
};
});
/* 向左翻页 */
pagination.getElementsByClassName('btnPrev')[0].addEventListener('click', function () {
if (pageIndex > 1) {
pageIndex--;
pageHtml = '';
initPagination();
cd && cd(pageIndex)
}
});
/* 向右翻页 */
pagination.getElementsByClassName('btnNext')[0].addEventListener('click', function () {
if (pageIndex < totalPage) {
pageIndex++;
pageHtml = '';
initPagination()
cd && cd(pageIndex)
}
});
/* 向左快速翻页 */
let btnGoLeft = pagination.getElementsByClassName('btnGoLeft')[0];
if (btnGoLeft) {
btnGoLeft.addEventListener('mouseenter', function () {
this.innerHTML = '<';
});
btnGoLeft.addEventListener('mouseleave', function () {
this.innerHTML = '...';
});
btnGoLeft.addEventListener('click', function () {
if (pageIndex > 10) {
pageIndex -= 10;
pageHtml = '';
initPagination();
cd && cd(pageIndex)
}
});
}
/* 向右快速翻页 */
let btnGoRight = pagination.getElementsByClassName('btnGoRight')[0];
if (btnGoRight) {
btnGoRight.addEventListener('mouseenter', function () {
this.innerHTML = '>';
});
btnGoRight.addEventListener('mouseleave', function () {
this.innerHTML = '...';
});
btnGoRight.addEventListener('click', function () {
if (pageIndex < totalPage - 10) {
pageIndex += 10;
pageHtml = '';
initPagination();
cd && cd(pageIndex)
}
});
}
}
initPagination();
}
export { generatePagination }