【发布时间】:2022-07-02 03:07:52
【问题描述】:
我正在尝试创建一个返回分页项的函数,这是我尝试过的(基于https://github.com/mui/material-ui/blob/v4.10.2/packages/material-ui-lab/src/Pagination/usePagination.js):
const pagination = (totalPages, siblingCount = 2, pageNumber) => {
const ELLIPSIS = '…';
const siblingsStart = Math.max(
Math.min(
// Natural start
pageNumber - siblingCount,
// Lower boundary when page is high
totalPages - siblingCount * 2 - 2,
),
// Greater than startPage
3,
);
const siblingsEnd = Math.min(
Math.max(
// Natural end
pageNumber + siblingCount,
// Upper boundary when page is low
siblingCount * 2 + 3,
),
// Less than endPages
totalPages - 2,
);
// Basic list of items to render
return [
1,
// Start ellipsis
// eslint-disable-next-line no-nested-ternary
...(siblingsStart > 3
? [ELLIPSIS]
: totalPages - 1 > 2
? [2]
: []),
// Sibling pages
...range(siblingsStart, siblingsEnd),
// End ellipsis
// eslint-disable-next-line no-nested-ternary
...(siblingsEnd < totalPages - 2
? [ELLIPSIS]
: totalPages - 1 > 1
? [totalPages - 1]
: []),
totalPages,
];
};
当(例如)pageNumber = 6 和totalPages = 20 时,此函数将返回如下字符串:
1 … 4 5 6 7 8 … 20
这很好,因为我想始终在 pageNumber 之前和之后显示两个数字。
所以当pageNumber = 1 我想要以下:
1 2 3 … 20
但是我得到了这个:
1 2 3 4 5 6 7 … 20
和pageNumber = 20的时候一样,我想得到这个:
1 … 18 19 20
我该如何解决这个问题?
【问题讨论】:
标签: javascript