基于jquery实现的分页组件

  分页组件现在在网页中的应用已经变得十分普遍,像我平时经常会去的淘宝和爱奇艺都有用到。

  分页的主要用处呢,就是可以分页面去请求数据,不然你像淘宝每个分类有成千上万个商品和店铺,全部请求过来再展示给你的话,那个加载时间可能会让等待的你要自闭了。(不过我算是萌新,如果淘宝不是分页请求的而是其它的方法,那么我自闭了。)

  所以这个组件的基本功能或者说要实现的效果大概就是这几个了:

  1. 根据选择的页码数请求在数据库中对应页的数据;
  2. 选择页码可以选择上一页,下一页,点击某一页或者跳转到某一页;
  3. 如果数据量特别大,可能页码数有特别多,那么在一行里不能完全显示,就要只显示第一页和最后一页的页码。然后展示中间的一些页码和两个省略号。

  关于jquery实现分页组件,网上有很多的框架可以用,不过既然是框架,使用的时候难免有些限制,所以本着学习新知识的态度,我就踏上了自己写一个分页组件的不归路。网上的框架很少会有对源码的解释,所以我就准备来写这篇blog,一方面让一些跟我一样的小白可以更加了解这个组件的实现,一方面让自己可以从头整理一遍实现这个组件的思路,毕竟一开始写的时候乱糟糟的,如果写着写着能想到怎么优化就更好了。

  好了,我们言归正转,首先我们先写出分页组件最后应该是什么样子的。

  

  因为项目的设计要求,在这个长度和每个页码的宽度下,我们最多展示八个页码,当页码数过多时,就将某个位置换成省略号。当然也会包括上一页按钮,下一页按钮,跳转到某页的input框和一个确定按钮。

  这个样式的实现想必是没什么难度的,我们在最外层套一个大的div,让这个大的div布局在页面中居中。其中的元素主要分为这么几块,上一页的按钮,一个包含着页码数的div,下一页的按钮,一个input框,一个确定按钮。在包含页码数的div里用flex布局,垂直方向上居中,水平方向上则是space-between,然后每一块都有一个margin-right为10px的属性。(css代码因为较长,这里就不罗列了,因为是静态的,并不是十分复杂)

  html代码如下: 

 <div class="pagingArea">
    <div class="lastPage" onclick="lastPage()">
      <div class="lastIcon"></div>
    </div>
    <div class="pageDiv" style="display: flex">
      <div class="pageNumber">1</div>
      <div class="pageNumber">2</div>
      <div class="pageNumber">3</div>
      <div class="pageNumber">4</div>
      <div class="pageNumber">5</div>
      <div class="pageNumber">6</div>
      <div class="pageNumber">7</div>
    </div>
    <div class="lastPage" onclick="nextPage()">
      <div class="nextIcon"></div>
    </div>
    <input class="choosePaging" id="pagingInput" />
    <div class="pagingConfirm" onclick="goPage()">确定</div>
  </div>

  前文也提到了,我们的分页组件主要分为两类,一类是页码数可以完全显示(即页码比较少的时候),一类则是一行显示不下,需要用到省略号的情况下,我们先来实现前一种,比较简单的,不需要用到省略号的情况(数据总数小于80)。

  首先来介绍一下实现逻辑。

  因为我们是不知道数据需要分为几页的,所以我们不能设置pagingArea和pageDiv的宽度,这点需要注意,我们只要保证pagingArea在整个页面的X轴上时居中的就可以了。

  其次,我们分析可以知道,pageDiv里面的内容是不确定的(因为我们不知道数据将被分成3页还是6页或是几页)。所以我们需要会根据请求到的分页页码数来动态添加。(我们这里默认一页显示十个数据,分页个数的确定就是请求到一个数据总数,然后我们除10,向上取整判断会被分成几页)。

  然后我们就可以开始进行分页啦。首先我们设置了三个全局变量。

  total:请求到的数据总数; pagingShowNum:用于储存显示出来的页码的数组(即可以被点击,不是在省略号里的页码);

  pageCount:请求第几页的数据,也可以理解成我们点击了分页的第几页;

  然后我们会有一个请求函数request() (在实际项目中应该是一个ajax请求,请求到一个数据总数并且赋值给total,这里我们只是为了展示分页的实现,就赋值给total一个48,表示数据总数为48)。

  因为pagingShowNum在之后会有改变,所以我们只在pageCount=1时进行赋值。分页的总页数=Math.ceil(total / 10);因为我们这里先讨论的是页码较少(小于8)的情况,所以判断分页的总数小于8时,给pagingShownNum数组赋值,元素是从1到分页总数。例如我们现在的数据总数total是58,则pagingShowNum这个数组就是[1,2,3,4,5,6];然后我们就执行showPaging()函数,这个函数的作用就是显示分页。

  它的原理也比较简单,<div class="pagingArea"></div>这个div里,先通过jquery里的append()方法,加上之前提到的几块内容(上一页的按钮,一个包含页码数字显示的div,下一页的按钮,跳转页码的输入框和确认按钮)。

  然后就比较简单了,也是用append()方法,将pagingShowNum数组中的数字循环的添加到包含页码数字的div里,这里我们用到了模板字符串,这里就不做介绍了,如果不知道的朋友可以自己去百度一下。同时我们需要加上id和onclick()方法,这个主要是为了之后选择页面时候使用的,之后会有介绍。这样操作完了以后,body里的代码,就会变成我们之前写的那个静态的写死的页面一样了。

  代码如下:($('.pagingArea').empty();这一句不要忘记加了,不然没执行一次这个函数,就会多一个分页组件了)

<body>
  <div class="pagingArea"> </div>
</body>
<script>
  var total = 0;//请求到的数据总数
  var pagingShowNum = [];//展示的页码数组成的数组
  var pageCount = 1;//请求的页码数
  request();
  function request() {
    total = 58;
    if (pageCount == 1) {
      if (Math.ceil(total / 10) < 8) {
        for (let i = 0; i < Math.ceil(total / 10); i++) {
          pagingShowNum[i] = i + 1;
        }
      }
    }
    showPaging(total);
  }
    function showPaging(total) {
    $('.pagingArea').empty();
    if (Math.ceil(total / 10) <= 8) {
      $('.pagingArea').append(`<div class="lastPage" onclick="lastPage()">
              
  • 10
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Bootstrap的分页组件可以帮助我们快速地实现分页功能。下面是一个简单的例子,演示如何使用Bootstrap的分页组件: ```html <!DOCTYPE html> <html> <head> <title>Bootstrap分页组件示例</title> <link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.0/css/bootstrap.min.css"> </head> <body> <div class="container"> <h1>Bootstrap分页组件示例</h1> <hr> <div class="row"> <div class="col-sm-12"> <table class="table table-striped"> <thead> <tr> <th>#</th> <th>姓名</th> <th>年龄</th> </tr> </thead> <tbody> <tr> <td>1</td> <td>张三</td> <td>18</td> </tr> <tr> <td>2</td> <td>李四</td> <td>20</td> </tr> <tr> <td>3</td> <td>王五</td> <td>22</td> </tr> <tr> <td>4</td> <td>赵六</td> <td>24</td> </tr> <tr> <td>5</td> <td>钱七</td> <td>26</td> </tr> </tbody> </table> <nav> <ul class="pagination"> <li class="page-item disabled"> <a class="page-link" href="#" tabindex="-1" aria-disabled="true">上一页</a> </li> <li class="page-item active" aria-current="page"> <a class="page-link" href="#">1</a> </li> <li class="page-item"> <a class="page-link" href="#">2</a> </li> <li class="page-item"> <a class="page-link" href="#">3</a> </li> <li class="page-item"> <a class="page-link" href="#">下一页</a> </li> </ul> </nav> </div> </div> </div> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.0/js/bootstrap.min.js"></script> </body> </html> ``` 在这个例子中,我们首先引入了Bootstrap的CSS和JavaScript文件。然后,我们创建了一个包含表格和分页组件的容器。分页组件使用了`<nav>`和`<ul>`标签来实现,每个页码都是一个`<li>`元素,其中当前页码使用了`active`类。我们还可以使用`disabled`类来禁用上一页和下一页按钮。最后,我们引入了jQuery和Bootstrap的JavaScript文件,以便分页组件正常工作。 这样,我们就完成了一个基于Bootstrap的分页组件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值