JS分页的实现(同步与异步)

JS分页的实现有同步和异步两种方式。在介绍这两种方式之前,需要了解下分页所需的一些数据和参数:

  1. 当前页码 currentPage
  2. 每页展示数据条数 pageSize
  3. 总数据量 totalDataCount
  4. 总页数 pageCount

其中,总页数pageCount可根据总数据量totalDataCount和每页展示条数pageSize相除得到。接下来我们分别介绍同步和异步两种方式的实现。

同步方式

同步方式指的是在页面加载时,将所有数据一次性加载出来,利用JS进行数据的筛选展示、分页切换等操作。对于数据量较小的项目来说,同步方式实现起来比较简单,例如:

 // 定义数据数组
 var data = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20"];

 // 配置分页参数
 var currentPage = 1;
 var pageSize = 5;
 var totalDataCount = data.length;
 var pageCount = Math.ceil(totalDataCount / pageSize);

 // 定义分页显示函数
 function showData(currentPage) {
   // 清空容器内容
   document.getElementById("container").innerHTML = "";
   // 根据当前页码和每页展示数据条数,筛选出要显示的数据
   var dataStartIndex = (currentPage - 1) * pageSize;
   var dataEndIndex = dataStartIndex + pageSize > totalDataCount ? totalDataCount : dataStartIndex + pageSize;
   var showDataList = data.slice(dataStartIndex, dataEndIndex);
   // 将数据展示在页面上
   showDataList.forEach(function(item) {
     var div = document.createElement("div");
     div.innerHTML = item;
     document.getElementById("container").appendChild(div);
   })

   // 根据总数据量和当前页码生成分页栏
   var pageNav = "";
   for (var i = 1; i <= pageCount; i++) {
     if (i === currentPage) {
       pageNav += "<span class='current-page'>" + i + "</span>";
     } else {
       pageNav += "<a href='javascript:void(0)' onclick='showData(" + i + ")'>" + i + "</a>";
     }
   }
   document.getElementById("page-nav").innerHTML = pageNav;
 }

 // 页面加载时,显示第一页的数据
 showData(currentPage);

在以上示例中,我们实现了一个简单的同步分页效果。通过计算展示数据的起始位置和总页数,使用for循环生成了一个分页栏,点击分页栏,则根据不同页码重新筛选展示的数据。

异步方式

异步方式指的是在页面加载完成后,仅仅加载第一页的数据,然后根据用户的点击动作进行AJAX请求获取分页所需的数据,再进行数据展示。以下是一个异步分页的示例:

 // 配置分页参数
 var currentPage = 1;
 var pageSize = 5;
 var totalDataCount = 0;
 var pageCount = 0;

 // 定义分页显示函数
 function showData(currentPage) {
   var xhr = new XMLHttpRequest();
   xhr.open("GET", "/api/data?page=" + currentPage + "&pageSize=" + pageSize, true);
   xhr.onreadystatechange = function() {
     if (xhr.readyState === 4) {
       if (xhr.status === 200) {
         var data = JSON.parse(xhr.responseText);
         totalDataCount = data.totalDataCount;
         pageCount = Math.ceil(totalDataCount / pageSize);
         // 清空容器内容
         document.getElementById("container").innerHTML = "";
         // 将数据展示在页面上
         data.dataList.forEach(function(item) {
           var div = document.createElement("div");
           div.innerHTML = item;
           document.getElementById("container").appendChild(div);
         })

         // 根据总数据量和当前页码生成分页栏
         var pageNav = "";
         for (var i = 1; i <= pageCount; i++) {
           if (i === currentPage) {
             pageNav += "<span class='current-page'>" + i + "</span>";
           } else {
             pageNav += "<a href='javascript:void(0)' onclick='showData(" + i + ")'>" + i + "</a>";
           }
         }
         document.getElementById("page-nav").innerHTML = pageNav;
       } else {
         alert("数据加载失败!");
       }
     }
   };
   xhr.send(null);
 }

 // 页面加载时,显示第一页的数据
 showData(currentPage);

在以上示例中,实现了动态加载数据的功能,当用户点击不同的分页时,会进行异步请求获取对应的数据,并进行展示。可以看到,在展示和分页栏的生成过程中,我们都参考了同步分页的实现方式,只不过数据加载的方式不同。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS分页的实现(同步与异步) - Python技术站

(0)
上一篇 2023年6月16日
下一篇 2023年6月16日

相关文章

  • Sprint Boot @Email使用方法详解

    @Email是Spring Boot中的一个注解,用于标记一个字段或方法参数的值必须是一个合法的电子邮件地址。在本文中,我们将详细介绍@Email注解的作用和使用方法,并提供两个示例。 @Email注解的作用 @Email注解用于标记一个字段或方法参数的值必须是一个合法的电子邮件地址。当使用@Email注解标记一个字段或方法参数时,如果该字段或方法参数的值不…

    Java 2023年5月5日
    00
  • 动态网站web开发 PHP、ASP还是ASP.NET

    动态网站是指在响应用户请求时,在服务器端动态生成HTML网页,与之相对的是静态网站,在服务器上提前生成好HTML文件,直接返回给客户端,无法根据用户请求的具体情况进行变动。动态网站的优势在于可以提供更加灵活、多样化的交互方式,而且可以方便地集成各种数据库,完成更加高级的应用功能。 Web应用开发的语言有很多种,但最常见的三种是PHP、ASP和ASP.NET。…

    Java 2023年6月15日
    00
  • PHP面向对象程序设计之对象生成方法详解

    PHP面向对象程序设计之对象生成方法详解 在 PHP 面向对象程序设计中,我们需要实例化对象用来访问类中定义的属性和方法。本篇文章将详细讲解对象生成的方法,包括对象实例化、对象继承和使用构造函数。 对象实例化 对象实例化是指使用 new 关键字创建类的新实例,如下所示: class Person { public $name; public $age; } …

    Java 2023年6月15日
    00
  • Java毕业设计实战之校园一卡通系统的实现

    Java毕业设计实战之校园一卡通系统的实现 系统实现的功能点 学生的基本信息管理(包括学生信息的录入、查询、修改和删除); 学生校园卡的管理(包括校园卡的发放、挂失、充值和注销); 学生消费记录管理(包括消费记录的录入、查询和统计); 管理员权限管理(包括管理员的新增、修改、删除和查询); 系统日志管理(包括系统操作日志和异常日志的记录和查询); 系统安全性…

    Java 2023年5月24日
    00
  • Java Web 实现QQ登录功能一个帐号同一时间只能一个人登录

    首先我们需要了解一下QQ登录的实现流程。 用户打开网站,点击QQ登录按钮。 网站向QQ开放平台发送授权请求,获取用户授权。 QQ开放平台返回用户授权凭证,包含用户唯一标识openid。 网站拿到授权凭证后,向QQ开放平台发送请求,获取用户信息。 网站将用户信息保存在数据库中,同时在用户登录时生成一个token,返回给用户。 用户在访问其他需要登录的页面时,将…

    Java 2023年6月16日
    00
  • springboot 自定义权限标签(tld),在freemarker引用操作

    下面是完整攻略: 1. 首先创建Spring Boot项目 可以使用Spring Initializr创建一个新的Spring Boot项目,选择Web和Freemarker作为依赖项。 2. 添加依赖项 在pom.xml文件中添加以下依赖项: <dependency> <groupId>org.springframework.boo…

    Java 2023年6月15日
    00
  • JVM执行引擎和垃圾回收要点总结

    下面是关于“JVM执行引擎和垃圾回收要点总结”的详细讲解: 1. JVM执行引擎要点总结 JVM执行引擎是Java程序运行的核心组成部分,JVM根据Java代码生成字节码,再由JVM执行引擎解释执行字节码文件,最终将结果反馈给用户。本部分将从以下几个方面对JVM执行引擎进行讲解。 1.1 JVM执行引擎的分类 JVM执行引擎主要分为两种类型: 解释器执行引擎…

    Java 2023年5月19日
    00
  • SpringBoot使用CommandLineRunner接口完成资源初始化方式

    下面是关于“SpringBoot使用CommandLineRunner接口完成资源初始化方式”的完整攻略: 简介 CommandLineRunner接口是Spring Boot中提供的一种在应用启动后自动执行代码的方式。通过实现该接口,我们可以在Spring Boot启动后自动完成某些资源的初始化操作,例如数据库的初始化、缓存的预热等。接下来我们就来详细讲解…

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