jQuery从零开始做一个分页组件功能示例

下面我将详细讲解“jQuery从零开始做一个分页组件功能示例”的完整攻略:

1. 概述

分页功能是前端开发中常用的功能之一,利用它可以将大量的数据分页显示。而jQuery是一款优秀的JavaScript库,它可以极大地简化我们开发的工作量。在这个示例中,我们将用jQuery来实现一个简单的分页组件。

2. 实现步骤

2.1 HTML结构

首先我们需要先创建一个基本的HTML结构,用于显示分页列表和相关数据。示例中我们将分页组件显示在id为“pagination”的元素内部,结构如下:

<div id="pagination">
  <ul class="pagination-list"></ul>
  <div class="pagination-info"></div>
</div>

其中,.pagination-list用于显示分页按钮,.pagination-info用于显示相关信息,如当前页数、总条数等。

2.2 初始化参数

在我们开始编写jQuery代码之前,需要先确定一些参数,如每页显示的数量、起始页码等。在这个示例中,我们假定每页显示10条,起始页码为1。

var pageSize = 10; // 每页显示数量
var currentPage = 1; // 当前页码
var totalPage = 0; // 总页数
var totalRecord = 0; // 总记录数

2.3 发送AJAX请求

将要分页显示的数据存储到服务端,我们需要先通过AJAX请求获取数据。这里我们假定服务端返回的数据格式如下:

{
  "total": 50, // 总记录数
  "list": [{}, {}, ...] // 当前页的记录
}

请求示例:

$.ajax({
  url: '/list',
  type: 'GET',
  data: {
    page: currentPage,
    pageSize: pageSize
  },
  success: function(data) {
    // 处理数据
  }
});

2.4 处理数据

在成功获取数据之后,我们需要对数据进行处理,计算总记录数及总页数,并填充到HTML结构中相应的位置。

totalRecord = data.total; // 总记录数
totalPage = Math.ceil(totalRecord / pageSize); // 总页数
$('.pagination-info').text(`共 ${totalRecord} 条记录,共 ${totalPage} 页`);

2.5 渲染分页按钮

计算完成总页数之后,我们需要根据当前页码和总页数渲染出分页按钮。在这个示例中,我们使用for循环来生成分页按钮。

var html = '';
var start = 1;
var end = totalPage;

if(totalPage > 10) {
  if(currentPage > 5) {
    start = currentPage - 4;
  }

  if(currentPage < totalPage - 4) {
    end = currentPage + 4;
  }

  if(currentPage <= 5) {
    end = 10;
  }

  if(currentPage >= totalPage - 4) {
    start = totalPage - 9;
  }
}

for(var i=start; i<=end; i++) {
  if(i == currentPage) {
    html += `<li class="active">${i}</li>`;
  } else {
    html += `<li>${i}</li>`;
  }
}

$('.pagination-list').html(html);

2.6 绑定事件

在渲染完成分页按钮之后,我们需要添加事件监听,以便用户点击按钮时能够触发相应的操作。在这个示例中,我们添加了两个事件:

  1. 点击分页按钮,切换当前页码并重新渲染分页按钮。
  2. 点击首页、上一页、下一页、尾页按钮,同样切换当前页码并重新渲染分页按钮。

事件示例:

// 点击分页按钮
$('.pagination-list').on('click', 'li', function() {
  var page = parseInt($(this).text());
  if(isNaN(page)) return false;
  currentPage = page;
  renderPage();
});

// 点击首页、上一页、下一页、尾页按钮
$('.pagination-info').on('click', 'a', function() {
  var action = $(this).data('action');
  switch(action) {
    case 'first':
      currentPage = 1;
      break;
    case 'prev':
      currentPage = currentPage > 1 ? currentPage - 1 : currentPage;
      break;
    case 'next':
      currentPage = currentPage < totalPage ? currentPage + 1 : currentPage;
      break;
    case 'last':
      currentPage = totalPage;
      break;
    default:
      break;
  }
  renderPage();
});

2.7 重新渲染分页按钮

最后,我们需要封装一个函数renderPage(),对分页按钮进行重新渲染。

function renderPage() {
  $.ajax({
    url: '/list',
    type: 'GET',
    data: {
      page: currentPage,
      pageSize: pageSize
    },
    success: function(data) {
      totalRecord = data.total;
      totalPage = Math.ceil(totalRecord / pageSize);
      $('.pagination-info').text(`共 ${totalRecord} 条记录,共 ${totalPage} 页`);

      var html = '';
      var start = 1;
      var end = totalPage;

      if(totalPage > 10) {
        if(currentPage > 5) {
          start = currentPage - 4;
        }

        if(currentPage < totalPage - 4) {
          end = currentPage + 4;
        }

        if(currentPage <= 5) {
          end = 10;
        }

        if(currentPage >= totalPage - 4) {
          start = totalPage - 9;
        }
      }

      for(var i=start; i<=end; i++) {
        if(i == currentPage) {
          html += `<li class="active">${i}</li>`;
        } else {
          html += `<li>${i}</li>`;
        }
      }

      $('.pagination-list').html(html);
    }
  });
}

3. 示例说明

3.1 分页列表样式

这个示例中分页列表的样式比较简单,只是以普通列表的方式展现。如果需要改变分页列表的样式,可以使用CSS来进行样式的调整。

.pagination-list {
  margin: 0;
  padding: 0;

  li {
    display: inline-block;
    padding: 5px 10px;
    margin-right: 5px;
    border: 1px solid #ccc;
    cursor: pointer;

    &.active {
      background: #fff;
      border-color: #666;
    }
  }
}

3.2 优化分页按钮数量

在渲染分页按钮时,如果总页数太多,则会导致分页按钮过多而显得臃肿。为了解决这个问题,我们可以限制每次最多显示10个分页按钮,并根据当前页码来动态调整展现的分页按钮。如下所示:

var start = 1;
var end = totalPage;

if(totalPage > 10) {
  if(currentPage > 5) {
    start = currentPage - 4;
  }

  if(currentPage < totalPage - 4) {
    end = currentPage + 4;
  }

  if(currentPage <= 5) {
    end = 10;
  }

  if(currentPage >= totalPage - 4) {
    start = totalPage - 9;
  }
}

for(var i=start; i<=end; i++) {
  if(i == currentPage) {
    html += `<li class="active">${i}</li>`;
  } else {
    html += `<li>${i}</li>`;
  }
}

这样就可以保证分页按钮的数量不会过多,同时又能满足用户的需求。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jQuery从零开始做一个分页组件功能示例 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • Jquery回调对象与延迟对象用法详解

    Jquery回调对象与延迟对象用法详解 什么是回调对象? 回调对象是指用于管理并维护多个回调函数的集合。在使用Jquery的一些API方法时,可以通过传递回调函数来实现一些异步操作,如Ajax请求、动画等。回调对象可以优雅地管理这些回调函数的执行顺序和执行结果。 Jquery中的回调对象有两种:Jquery.Callbacks() 和 Jquery.Defe…

    jquery 2023年5月28日
    00
  • jQWidgets jqxGauge LinearGauge rangeSize属性

    jQWidgets jqxGauge LinearGauge rangeSize属性 jQWidgets是一个基于jQuery的UI组件库,提供了丰富的UI组件和工具,包括表格、图表、日历、菜单等。jqxGauge和jqxLinearauge是jQWidgets中的两个组件,用于显示仪表盘和线性仪盘。这两个组件都提供了rangeSize属性用于设置范围的大小…

    jquery 2023年5月9日
    00
  • 10个基于jQuery或JavaScript的WYSIWYG 编辑器整理

    以下是“10个基于jQuery或JavaScript的WYSIWYG 编辑器整理”的完整攻略: 1. 了解 WYSIWYG 编辑器 WYSIWYG 编辑器(所见即所得编辑器,What You See Is What You Get Editor)是一种帮助用户在不需要直接操作 HTML 代码的情况下创建和编辑网页内容的技术。它提供了类似于文档编辑器或文字处理…

    jquery 2023年5月28日
    00
  • 基于jQuery的Web上传插件Uploadify使用示例

    基于jQuery的Web上传插件Uploadify使用示例 1. 简介 Uploadify是一个基于jQuery的文件上传插件。它提供简便易用的方式来上传多个文件。此插件还支持文件上传队列、拖放上传、文件类型限制、进度条等多种功能。 2. 安装和使用 下载Uploadify 首先,我们需要从Uploadify的官网下载此插件。下载后将文件解压缩,我们可以得到…

    jquery 2023年5月27日
    00
  • jQWidgets jqxLayout resize 事件

    jQWidgets jqxLayout resize 事件攻略 简介 jQWidgets 是一个基于 jQuery 的 UI 组件库,提供了丰富的 UI 组件和工具,可于创建代化应程序。jqxLayout局组用于灵活的布局,可用于构建复杂的用户界面。本攻略将详细介绍 jqxLayout 的 resize 事件,包括 resize 事件的使用方法和示例。 re…

    jquery 2023年5月10日
    00
  • jQuery UI Button option()方法

    jQuery UI 的 Button 组件提供了一个 option() 方法,该方法用于获取或设置 Button 实例的选项。在本教程中,我们将详细介绍 Button 的 option() 方法的使用方法。 option() 方法基本语法如下: $( ".selector" ).button( "option", op…

    jquery 2023年5月11日
    00
  • jQWidgets jqxToolBar maxWidth 属性

    以下是关于 jQWidgets jqxToolBar 组件中 maxWidth 属性的详细攻略。 jQWidgets jqxToolBar maxWidth 属性 jQWidgets jqxToolBar 组件 maxWidth 属性用于设置工栏的最大宽度。该属性接受数字或字符串值,表示工具栏的最大宽度。默认值为 null,表示没有最大宽度限制。 语法 $(…

    jquery 2023年5月11日
    00
  • 如何使用jQuery来触发选择框的点击悬停

    要使用jQuery触发选择框的点击悬停,可以使用trigger()方法。下面是一个完整攻略,包括两个示例说明。 步骤1:创建HTML和CSS 首先,我们需要一个HTML和CSS以便在页面中显示一个选择框。下面是一个示例HTML和CSS: <!DOCTYPE html> <html> <head> <title>…

    jquery 2023年5月9日
    00
合作推广
合作推广
分享本页
返回顶部