前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >带有省略号的分页器

带有省略号的分页器

作者头像
DioxideCN
发布2023-01-10 10:02:45
1.3K0
发布2023-01-10 10:02:45
举报

带有省略号的分页器

目标与需求分析

假设总页数为 totalPage ,当前点击选中的页数为 clickPage 该值从 1 开始计算,总页数从大于 7 开始构造省略号的按钮。依据分类讨论可以得到以下四种情况:

我们通过几个具体情况来进一步分析什么时候产生省略号,假设 totalPage 为 9:

代码实现

代码语言:javascript
复制
// 点击页
clickPage = parseInt(clickPage)
// 计算总页数 res.length 为请求后端接口得到的数据数量
totalPage = Math.ceil(res.length / pageSize);
// 清空列表 $pageList 为存储分页按钮的 div 容器 使用 JQuery 获取
$pageList.html("");
// 重新渲染上下页按钮 $pagePrev $pageNext 为上一页和下一页按钮
if (clickPage === 1 && totalPage > 1) { 
	$pagePrev.hide();
	$pageNext.show();
} else if (clickPage === totalPage && totalPage > 1) {
	$pagePrev.show();
	$pageNext.hide();
} else if (totalPage <= 1) {
	$pagePrev.hide();
	$pageNext.hide();
} else {
	$pagePrev.show();
	$pageNext.show();
}
if (totalPage <= 7) {
	// totalPage 小于等于 7 时直接构造
	for (let i = 1; i <= totalPage; i++) {
		$pageList.append('<a class="page-number ' + (i===clickPage?'active':'') + '" data-type="' + i + '">' + i + '</a>');
	}
} else {
	// 在内存中创建含有 7 个分页按钮的数组
	const pageArray = ['1',null,null,null,null,null,totalPage.toString()];
	// 用来标记 clickPage 在数组中的索引位置
	let index = 0;
	// 判断第二位是否是省略号按钮
	if (clickPage > 4) {
		pageArray[1] = '...';
	}
	// 判断倒数第二位是否是省略号按钮
	if (clickPage < totalPage - 3) {
		pageArray[5] = '...';
	}
	// clickPage 靠近第一页 clickPage-1 的差值在[0,2]之间
	if (clickPage >= 1 && clickPage <= 3) {
		index = clickPage - 1;
		pageArray[index] = clickPage.toString();
	}
	// clickPage 靠近最后一页 totalPage-clickPage 的差值在[0,2]之间
	if (totalPage >= clickPage && totalPage - clickPage <= 2) {
		index = 6 - totalPage + clickPage;
		pageArray[index] = clickPage.toString();
	}
	// 如果以上条件均不满足则 clickPage 一定在中间
	if (index === 0 && clickPage !== 1 && clickPage !== totalPage) {
		index = 3;
	}
	// 对数组中剩下的 null 元素进行页数的赋值
	for (let i = 0; i < pageArray.length; i++) {
		if (pageArray[i] === null) {
			pageArray[i] = (parseInt(clickPage) + i - index).toString();
		}
		// 将其作为一个 a 标签插入到容器中
		$pageList.append('<a class="page-number ' + (pageArray[i]===clickPage.toString()?'active':'') + '" data-type="' + pageArray[i] + '">' + pageArray[i] + '</a>');
	}
}
// 获取所有可点击的分页按钮 不包含 active 且 data-type 不等于 ...
$pageClickable = $(".page-number:not(.active)[data-type!='...']");
// 赋予这些按钮点击事件
$pageClickable.on("click", async function (e) {
	e.stopPropagation();
	// 具体操作
	refreshPage(pageOnClicked); // 每次重新选择分页就需要刷新分页器
})
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-01-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 带有省略号的分页器
    • 目标与需求分析
      • 代码实现
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档