首先形形色色的分页器大家肯定都看过,这一次就快速实现一个简单的分页器,应该不会耽搁太久吧~

先来看一下简洁布局:

瞜一眼这布局:

  1. 页码数量总共只有9
  2. 当足够显示所有页码的情况就全部显示了

那么问题来了,如果不够呢?

  1. 第一种情况
  2. 第二种情况
  3. 第三种情况

正点:

  1. 总共只能显示九个页码
  2. 当不够的是则显示省略号
  3. 最主要的是省略号的位置,而省略号的位置由取决于当前页码处于哪里
    3.1 当前页码接近首页时, 则小于等于 7, 省略号靠近尾页
    3.2 当前页码接近尾页时,则大于等于尾页 - 7,省略号靠近首页
    3.3 当以上不成立的时候,首尾两边都有省略号
  4. 必须凑足九个页码
function pageView(total, cur) {var pageNum = [];// 小于九个页码,开开心心if (total <= 9) {for (var i = 0; i < total; i++) {pageNum.push(i + 1);}} else {// 超出九个页码另当别论if (cur <= 7) {// 前面显示的页码for (var i = 0; i < 7; i++) {pageNum.push(i + 1);}// 补齐页码pageNum.push('...', total);} else if (cur >= total - 7) {// 后面显示的页码for (var i = 0; i < 7; i++) {pageNum.unshift(total - i);}// 补齐页码pageNum.unshift(1, '...');} else {// 凑足九个页码pageNum = [1, '...', cur - 2, cur - 1, cur, cur + 1, cur + 2, '...', total];}}return pageNum;}

打印效果

    // 刚刚好,万事大吉var total = 9;var cur = 1;console.log(pageView(total, cur)); // [1, 2, 3, 4, 5, 6, 7, 8, 9]// 当前页码靠近首页total = 100;cur = 1;console.log(pageView(total, cur)); // [1, 2, 3, 4, 5, 6, 7, "...", 100]// 当前页码靠近尾页total = 100;cur = 99;console.log(pageView(total, cur)); // [1, "...", 94, 95, 96, 97, 98, 99, 100]// 当前页码靠中间total = 100;cur = 50;console.log(pageView(total, cur)); // [1, "...", 48, 49, 50, 51, 52, "...", 100]

事情并没有那么简单~

上面的7应该是活的,(cur - 2, cur - 1, cur, cur + 1, cur + 2)也应该是活的,因为页码不可能就用于是九个,哪天我就想要一个能显示15个页码的呢?很简单,改造一下

  1. 当前页j接近于左右某一端 : 用可显示页码的个数 - 2
    原因: 首页,尾页总得占一个,再加上一个省略号
  1. 情况居于中间: (用可显示页码的个数 - 5)/ 2
    原因:首页,尾页, 两个省略号,一个当前页,然后除于2,是因为当前页左右两边平均分
function pageView(total, cur, pagesLen) {var pageNum = [];// 小于九个页码,开开心心if (total <= pagesLen) {for (var i = 0; i < total; i++) {pageNum.push(i + 1);}} else {// 超出九个页码另当别论var max = pagesLen - 2; // 首|尾 + ...if (cur <= max) {// 前面显示的页码for (var i = 0; i < max; i++) {pageNum.push(i + 1);}// 补齐页码pageNum.push('...', total);} else if (cur >= total - max) {// 后面显示的页码for (var i = 0; i < max; i++) {pageNum.unshift(total - i);}// 补齐页码pageNum.unshift(1, '...');} else {// 凑足pagesLen个页码var around = (pagesLen - 5) / 2;// 当前页左右两边的页码var leftArr = [];var rightArr = [];for (var i = 1; i <= around; i++) {leftArr.unshift(cur - i);rightArr.push(cur + i);}// 凑页码pageNum = leftArr.concat(cur, rightArr);pageNum.push('...', total);pageNum.unshift(1, '...');}}return pageNum;}

效果

    // 页码多于totalvar total = 9;var cur = 1;var pagesLen = 15;console.log(pageView(total, cur, pagesLen)); // [1, 2, 3, 4, 5, 6, 7, 8, 9]// 当前页码靠近首页total = 100;cur = 1;pagesLen = 15;console.log(pageView(total, cur, pagesLen)); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, "...", 100]// 当前页码靠近尾页total = 100;cur = 99;pagesLen = 15;console.log(pageView(total, cur, pagesLen)); // [1, "...", 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]// 当前页码靠中间total = 100;cur = 50;pagesLen = 15;console.log(pageView(total, cur, pagesLen)); // [1, "...", 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, "...", 100]

快速实现-简单分页器(上)相关推荐

  1. 使用Python和OpenCV实现超快速,简单的伽玛校正功能

    使用Python和OpenCV实现超快速,简单的伽玛校正功能 1. 效果图 2. 什么是伽玛校正? 3. 源码 参考 这篇博客将介绍伽马校正(也称为幂律变换)是什么,并将演示如何使用Python和Op ...

  2. JAVA5000行代码什么概念_GitHub - catstiger/mvc: 一个不超过5000行代码的,快速,简单,易用的MVC框架。...

    一个不超过5000行代码的,快速,简单,易用的MVC框架. 我们的目的是: 让MVC回归其最初的目的. 因简单而快速,超过目前各种主流MVC. 零侵入,零配置,易于测试,并且让开发者感觉不到MVC的存 ...

  3. EpiQuik病毒RNA提取试剂盒,快速、简单、经济有效

    基于柱和磁珠的方法为从临床标本中提取病毒 RNA 基因组提供了一种快速方便的方法.Epigentek的各种用于分离RNA的磁珠和离心柱试剂盒来自不同样本来源(细胞.组织.全血.唾液.鼻咽拭子)和物种( ...

  4. 新手坐高铁怎么找车厢_坐高铁时如何快速找到自己车票上的车厢和座位! 说出来你都不敢相信...

    现在我国大力在发展高铁行业.慢慢的以前的绿皮火车由于速度缓慢,乘坐环境较差就被高铁所挤下去了,人们越来越愿意乘坐高铁出行.毕竟高铁速度上是火车的数倍,而且环境也非常好.但是大家坐高铁什么的时候是不是都 ...

  5. Java虚拟机知识点快速复习手册(上)

    前言 本文快速回顾了常考的的知识点,用作面试复习,事半功倍. 上篇主要内容为:虚拟机数据区域,垃圾回收 下篇主要内容为:类加载机制 面试知识点复习手册 全复习手册文章导航 Csdn全复习手册文章导航: ...

  6. 会声会影2022试用版 智能、快速、简单的视频剪辑软件

    会声会影2022-智能.快速.简单的视频剪辑软件,会声会影的灵活性和易用性成就与众不同的视频剪辑体验, 备受高级用户和入门级用户的青睐. 会声会影让您享受丰富的视频剪辑功能,帮助您轻松创建您想要的影片 ...

  7. 赛效:快速、简单的在线修改图片工具怎么用

    在日常生活中,我们经常需要对图片进行修改,以使它们更加美观或符合需求.但是,许多人并不知道如何使用在线修改图片工具,或者不知道如何选择合适的工具来完成修图工作.下面,我们就来介绍一下如何使用快速.简单 ...

  8. 利用Wireshark和OSS的API文档简单实现上传和下载

    背景及目的 由于各个开发者使用的开发语言可能在官方SDK找不到相应的语言版本,就必须自主开发SDK. 本文根据wireshark和API文档,来简单实现上传和下载的请求,给需要自主开发的开发者提供一个 ...

  9. linux只有上传文件到站点,史上最简单的上传文件到linux系统方法

    史上最简单的上传文件到linux系统方法 工具/原料 linux,windows filezilla 方法/步骤 1 下载 Filezilla client工具,此客户端为免费软件,下载完成后安装,安 ...

最新文章

  1. Webpack-IE低版本兼容指南
  2. 我的世界java版袭击图片_我的世界:你mc“中毒”有多深?这8张图都能看懂,绝对是真爱粉...
  3. 微信小程序里页面滚动到底部
  4. 应用上云 2 小时烧掉近 50 万,创始人:差点破产,简直噩梦
  5. 带有Netflix Ribbon的Spring Cloud Rest Client-基础知识
  6. Alpine Linux:从漏洞发现到代码执行
  7. opencv python3 找图片不同_基于OpenCV-python3实现抠图
  8. [转载]JSONP跨域的原理解析
  9. 衡水互联网服务器网站,衡水联通dns的服务器地址
  10. 加性高斯白噪声信道的信道容量
  11. 服务器被ddos攻击?分析如何防止DDOS攻击?
  12. 经营项目计算机、软件及辅助设备、
  13. Docker swarm 管理 secrets
  14. 流程编排框架LiteFlow详解
  15. ORA-12801: error signaled in parallel query server PZ99分析
  16. Vue3/ Vue3 组件通讯 -- 子传父 方法流程 总结
  17. Linux Centos 7软件防火墙
  18. URLOS实战入门—制作LAP网站环境
  19. 遇见Laravel Migrations的migrate与rollback
  20. Java统计字符串中字符重复次数

热门文章

  1. 鸽巢原理(初识)(纯算法)
  2. Time For Kids 很不错的英语学习周刊
  3. Linux--管理LVM的逻辑卷--原理+命令实操(LVM扩容+磁盘配额)
  4. 【学生护眼台灯怎么样选择?推荐专业护眼灯热门四大品牌无标题】
  5. 修改Tomcat的端口号方法
  6. Java 获取当前时间前一个小时的时间
  7. Kaggle数据集-贷款逾期预测
  8. 用java下载apk解析包出错_Android 9.0 安装包解析错误 java.lang.SecurityException: Permission Denial解决方案...
  9. 一款实用的综合性导航网站
  10. 多个精美的导航样式web2.0源码