hexo-bilibili-bangumi
Version:
88 lines (78 loc) • 3.62 kB
JavaScript
/*
* @Author : HCLonely
* @Date : 2024-09-11 15:40:57
* @LastEditTime : 2025-07-09 20:36:29
* @LastEditors : HCLonely
* @FilePath : /hexo-bilibili-bangumi/src/lib/templates/pagination.js
* @Description : 分页功能实现脚本,提供首页、上一页、下一页、末页等导航功能。
* 实现了页码显示、页面内容切换、图片懒加载等功能,每页显示10条数据,
* 支持自定义预加载数据量配置。
*/
// eslint-disable-next-line no-unused-vars
function pagination() {
const firstpages = document.getElementsByClassName('bangumi-firstpage');
const previouspages = document.getElementsByClassName('bangumi-previouspage');
const nextpages = document.getElementsByClassName('bangumi-nextpage');
const lastpages = document.getElementsByClassName('bangumi-lastpage');
const pagenums = document.getElementsByClassName('bangumi-pagenum');
function makePageNum(num, arr) {
return `${num + 1} / ${Math.ceil(arr.length / 10 === 0 ? 1 : Math.ceil(arr.length / 10))}`;
}
function firstBtn() {
const sibs = this.parentNode.siblings();
displayPage(sibs, 0);
this.parentNode.getElementsByClassName('bangumi-pagenum')[0].innerText = makePageNum(0, sibs);
}
function previousBtn() {
const sibs = this.parentNode.siblings();
let currNum = this.parentNode.getElementsByClassName('bangumi-pagenum')[0].innerText;
currNum = currNum.substr(0, currNum.indexOf('/') - 1);
currNum = parseInt(currNum, 10) - 1;
if (currNum > 0) {
currNum--;
}
displayPage(sibs, currNum);
this.parentNode.getElementsByClassName('bangumi-pagenum')[0].innerText = makePageNum(currNum, sibs);
}
function nextBtn() {
const sibs = this.parentNode.siblings();
let currNum = this.parentNode.getElementsByClassName('bangumi-pagenum')[0].innerText;
currNum = currNum.substr(0, currNum.indexOf('/') - 1);
currNum = parseInt(currNum, 10) - 1;
if (currNum < Math.ceil(sibs.length / 10) - 1) {
currNum++;
}
displayPage(sibs, currNum);
this.parentNode.getElementsByClassName('bangumi-pagenum')[0].innerText = makePageNum(currNum, sibs);
}
function lastBtn() {
const sibs = this.parentNode.siblings();
displayPage(sibs, Math.ceil(sibs.length / 10) - 1);
this.parentNode.getElementsByClassName('bangumi-pagenum')[0].innerText =
makePageNum(Math.ceil(sibs.length / 10) - 1 === -1 ? 0 : Math.ceil(sibs.length / 10) - 1, sibs);
}
function displayPage(arr, num) {
for (let i = 0; i < arr.length; i++) {
if (Math.floor(i / 10) === num) {
arr[i].classList.remove('bangumi-hide');
const [img] = arr[i].getElementsByTagName('img');
if (hexoBilibiliBangumiOptions.bangumiLazyload) {
img.src = img.getAttribute('data-bangumi-src');
}
} else {
arr[i].classList.add('bangumi-hide');
}
}
}
for (let i = 0; i < firstpages.length; i++) {
// add listener
firstpages[i].onclick = firstBtn;
previouspages[i].onclick = previousBtn;
nextpages[i].onclick = nextBtn;
lastpages[i].onclick = lastBtn;
// set page num
const size = typeof hexoBilibiliBangumiOptions.pagenumsPre !== 'undefined' ? (hexoBilibiliBangumiOptions.pagenumsPre[i] ?? pagenums[i].parentNode.siblings().length) : pagenums[i].parentNode.siblings().length;
firstpages[i].click();
pagenums[i].innerText = `1 / ${Math.ceil(size / 10) === 0 ? 1 : Math.ceil(size / 10)}`;
}
};