function myPageInit({
pages = 10,
currentPage = 1,
element = '.my-page',
callback
}) {
intercept();
const myPageEl = document.querySelector(element);
// 构造结构
let htmlStrArr = [];
for (let i = 0; i < pages; i++) {
htmlStrArr.push(`
${i + 1}`);
};
if (pages > 7) {
htmlStrArr.splice(5, htmlStrArr.length - 6, "...");
};
htmlStr = htmlStrArr.join("");
let pageHtmlStr = `上页
下页
`;
// 注入结构
myPageEl.innerHTML = pageHtmlStr;
// 标记默认页
clickPageFun(currentPage);
// 上下页切换事件注册
let btns = document.querySelectorAll(`${element} div`);
btns.forEach(el => {
el.onclick = switchPage;
});
// 点击事件注册
myPageEl.onclick = function (e) {
// console.log(e)
let classNameArr = e.target.className.split(" ");
if (classNameArr.indexOf("my-page-cell") !== -1) {
clickPageFun(Number(e.target.innerText));
};
}
// 上下页按钮触发
function switchPage(e) {
// 获取当前页
let page = document.querySelector(`${element} .my-page-checked`).innerText - 0;
let classNameArr = e.target.className.split(" ");
if (classNameArr.indexOf("my-page-prev") !== -1) {
clickPageFun(page - 1); // 上一页
} else if (classNameArr.indexOf("my-page-next") !== -1) {
clickPageFun(page + 1); // 下一页
};
};
// 分页切换处理
function clickPageFun(page) {
page = Number(page);
// 满足条件改变结构
if (pages > 7) {
let newEl = '';
if (page <= 4) {
newEl = `
1
2
3
4
5
...
${pages}`;
} else if (page >= 5 && page < pages - 3) {
newEl = `
1
...
${page - 1}
${page}
${page + 1}
...
${pages}`;
} else if (page >= pages - 3) {
newEl = `
1
...
${pages - 4}
${pages - 3}
${pages - 2}
${pages - 1}
${pages}`;
};
document.querySelector(`${element} .my-page-group`).innerHTML = newEl;
};
// 标注选中项
let pageCellELs = document.querySelectorAll(`${element} .my-page-cell`);
pageCellELs.forEach(el => {
if (el.innerText == page) {
el.classList.add('my-page-checked');
} else {
el.classList.remove('my-page-checked');
};
});
forbidden(page);
// 回调响应
callback && callback(page);
};
// 上下页按钮启禁
function forbidden(page) {
let prveEl = document.querySelector(`${element} .my-page-prev`);
let nextEl = document.querySelector(`${element} .my-page-next`);
if (page === 1) {
prveEl.classList.add('my-page-forbid');
} else {
prveEl.classList.remove('my-page-forbid');
};
if (page === pages) {
nextEl.classList.add('my-page-forbid');
} else {
nextEl.classList.remove('my-page-forbid');
};
};
// 参数检验
function intercept() {
if (!pages || pages === 0 || (Math.floor(pages) != pages)) {
throw "my-page中pages必须是整数且不为0";
pages = Math.floor(pages);
};
if (!currentPage || currentPage === 0 || (Math.floor(currentPage) !== currentPage)) {
throw "my-page中currentPage必须是整数且不为0";
currentPage = Math.floor(currentPage);
};
if (document.querySelectorAll(element).length === 0) {
throw element + "元素不存在";
};
if (currentPage > pages) {
throw "当前页不存在";
}
};
}