求 MongoDB 数据分页的实现思路

分页展示如下,不知道这种分页的实现思路应该怎么实现?

当前页:第1页
[1] 2 3 ... 100

当前页:第3页
1 2 [3] 4 5 ... 100

当前页:第5页
1 ... 3 4 [5] 6 7 ... 100

当前页:第98页
1 ... 96 97 [98] 99 100

当前页:第100页
1 ... 98 99 [100]
阅读 6k
2 个回答

跟什么数据库没关系吧?
只要发现规律就好了,拿到当前页$current和总页数$total

你的规律应该是,只展示当前页加减2页,
另外对首页和最后一页特殊判断下就ok了,不是第一页就显示1,不是最后一页就显示最后一页,
对省略号的判断差不多,文字太多不写了

这个应该是纯在前端来实现的,后端正常分页就好,可以参考下面的算法,仅供参考

function getPagination(currentPage, totalCount, pageSize) {

// 计算总页数
var totalPage = Math.ceil(totalCount / pageSize);

// 定义变量来存储页码
var pageNumbers = [];

if (totalPage <= 7) {
  // 如果总页数不超过7页,直接输出所有页码
  for (var i = 1; i <= totalPage; i++) {
    pageNumbers.push(i);
  }
} else {
  if (currentPage <= 4) {
    // 当前页码靠近起始页时
    for (var i = 1; i <= 5; i++) {
      pageNumbers.push(i);
    }
    pageNumbers.push("...");
    pageNumbers.push(totalPage);
  } else if (currentPage >= totalPage - 3) {
    // 当前页码靠近结束页时
    pageNumbers.push(1);
    pageNumbers.push("...");
    for (var i = totalPage - 4; i <= totalPage; i++) {
      pageNumbers.push(i);
    }
  } else {
    // 当前页码在中间部分时
    pageNumbers.push(1);
    pageNumbers.push("...");

    // 加入两个相邻的页码
    for (var i = currentPage - 2; i <= currentPage + 2; i++) {
      pageNumbers.push(i);
    }

    pageNumbers.push("...");
    pageNumbers.push(totalPage);
  }
}

return pageNumbers.join(" ")

}

// 测试
console.log(getPagination(1, 1000, 10));
console.log(getPagination(3, 1000, 10));
console.log(getPagination(5, 1000, 10));
console.log(getPagination(7, 1000, 10));
console.log(getPagination(55, 1000, 10));
console.log(getPagination(95, 1000, 10));
console.log(getPagination(98, 1000, 10));
console.log(getPagination(100, 1000, 10));
console.log(getPagination(111, 1000, 10));
VM712:49 1 2 3 4 5 ... 100
VM712:50 1 2 3 4 5 ... 100
VM712:51 1 ... 3 4 5 6 7 ... 100
VM712:52 1 ... 5 6 7 8 9 ... 100
VM712:53 1 ... 53 54 55 56 57 ... 100
VM712:54 1 ... 93 94 95 96 97 ... 100
VM712:55 1 ... 96 97 98 99 100
VM712:56 1 ... 96 97 98 99 100
VM712:57 1 ... 96 97 98 99 100
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题