简易分页制作

简易分页功能实现

分页是一种常见的前端功能,特别是在需要展示大量数据时。它通过将数据分割成多个页面,帮助用户更容易浏览并提高页面加载性能。本文将介绍一个简易分页的实现思路及其代码实现,旨在帮助开发者快速理解并实现分页功能。

功能概述

这个示例实现了一个简单的分页功能,包括以下主要功能:

  • 数据分页显示:根据每页的条数和当前页显示相应的数据。
  • 分页控件:展示当前页信息,并允许用户通过上一页、下一页按钮或直接跳转到指定页面进行浏览。
  • 自定义每页显示的条数:用户可以选择每页显示不同条数的数据。
  • 跳转页功能:用户可以直接输入页码跳转到指定的页面。
  • 警告提示:如果输入的页码超出有效范围,会弹出警告提示。
核心思路
  1. 数据存储与加载

    • 数据以JSON格式存储,并通过XMLHttpRequest请求加载到前端。
    • 数据加载完成后,进行分页展示。
  2. 分页计算

    • 根据总数据量和每页数据量,计算出总页数。
    • 使用当前页的索引(从0开始)来确定需要展示的数据范围。
  3. 渲染表格与分页控件

    • 在表格中展示当前页的数据。
    • 在底部渲染分页控件,显示当前页数、总页数以及每页显示的条数等信息。
    • 动态生成页码链接,根据用户的选择更新页面。
  4. 用户交互

    • 提供上一页、下一页按钮以及页码跳转功能。
    • 用户可以通过选择每页显示的数据条数来调整显示内容。
代码实现
<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>简易分页</title><style>/* 表格设置宽高 */.boxes {width: 60%;height: 100%;margin: auto;text-align: center;}.item {min-height: 200px;max-height: 700px;overflow: auto;}/* 设置行高 */.itemes {line-height: 200%;}/* 底部导航栏 */.box {width: 80%;height: 30px;display: flex;margin: 1% auto;justify-content: space-between;line-height: 30px;}.box>button {width: 30px;cursor: pointer;border: none;font-size: 20px;}.pages>span {padding: 3px 8px;cursor: pointer;}input {width: 30px;margin: 4px;}/* 弹出警告窗口 */.warning {width: 25%;height: 50px;border-radius: 10px;box-shadow: 1px 2px 10px lightgray;padding-left: 20px;position: fixed;right: 0;background-color: #fde2e2;color: #f56c6c;display: none;}.title {font-weight: 600;}</style></head><body><!-- 警告弹出窗 --><div class="warning"><div class="title">错误</div><div>没有当前页数,请重新输入</div></div><!-- 表格 --><div class="item"><table class="boxes" cellspacing="0"><thead><tr><th>id</th><th>内容</th><th>标题</th></tr></thead><tbody></tbody></table></div><!-- 底部导航栏 --><div class="box"></div><script>let k = 0; // 当前页let data; // 存储数据let num = 5; // 每页显示的数据条数let total = 0; // 总页数let main = document.getElementsByTagName('tbody')[0]; // 获取表格主体let foot = document.getElementsByClassName('box')[0]; // 获取分页底部// 创建 XMLHttpRequest 获取数据let xhr = new XMLHttpRequest();xhr.open('get', './js/paging.json', true);xhr.send();// 当数据请求完成时,处理响应xhr.onreadystatechange = function() {if (xhr.readyState == 4 && xhr.status == 200) {data = JSON.parse(xhr.responseText); // 解析 JSON 数据console.log(data);renderTable(); // 渲染表格}};// 渲染表格内容function renderTable() {let str = '';for (let i = k * num; i < (k + 1) * num; i++) {if (i >= data.length) break; // 防止超出数据范围str += `<tr class="itemes"><td>${data[i].id}</td><td>${data[i].name}</td><td>${data[i].title}</td></tr>`;}main.innerHTML = str; // 将内容插入表格renderPagination(); // 渲染分页}// 渲染分页控件function renderPagination() {let strs = '';total = Math.ceil(data.length / num); // 计算总页数strs += `<span>第${k + 1}页/共${total}页</span><span>当前${num}条/共${data.length}条数据</span><select onchange="changeItemsPerPage(value)"><option value="${num}">${num}条/页</option><option value="5">5条/页</option><option value="15">15条/页</option><option value="30">30条/页</option><option value="45">45条/页</option><option value="60">60条/页</option></select><button onclick="lastPage()"> < </button><!-- 不要学博主,这边建议用图标,因为可能会被识别成比较运算符 --><div class="pages">`;// 生成页码if (total < 6) {for (let i = 0; i < total; i++) {strs += createPageLink(i);}} else {if (k < 3) {for (let i = 0; i < 5; i++) {strs += createPageLink(i);}strs += `...`;} else if (k > total - 4) {strs += `...`;for (let i = total - 5; i < total; i++) {strs += createPageLink(i);}} else {strs += `...`;for (let i = k - 2; i <= k + 2; i++) {strs += createPageLink(i);}strs += `...`;}}strs += `</div><button onclick="nextPage()"> > </button><!-- 不要学博主,这边建议用图标,因为可能会被识别成比较运算符 --><span>前往第<input type="text" id="input" onchange="goToPageInput()"/>页</span>`;foot.innerHTML = strs;}// 创建页码链接function createPageLink(page) {return `<span class="tail_page" onclick="goToPage(${page})" ${k === page ? 'style="color:#4DAAFF;"' : ''}>${page + 1}</span>`;}// 上一页function lastPage() {if (k > 0) {k--;renderTable();}}// 下一页function nextPage() {if (k < total - 1) {k++;renderTable();}}// 改变每页显示条数function changeItemsPerPage(value) {num = parseInt(value);k = 0; // 每次改变每页显示条数时,返回第一页renderTable();}// 跳转到指定页function goToPageInput() {let input = document.getElementById('input');let warn = document.getElementsByClassName('warning')[0]; // 获取警告信息元素let page = parseInt(input.value); // 获取输入的页码if (page > 0 && page <= total) {k = page - 1; // 跳转到指定页面renderTable();} else {warn.style.display = 'block'; // 显示警告信息input.value = ''; // 清空输入框setTimeout(() => {warn.style.display = 'none'; // 隐藏警告信息}, 3000);}}// 跳转到指定页(点击页码时调用)function goToPage(page) {k = page;renderTable();}</script></body>
</html>

JSON假数据(可更改):

[{"id": 1,"name": "路易威登","title": "老花手袋"},{"id": 2,"name": "Cartier","title": "卡地亚猎豹系列"},{"id": 3,"name": "海瑞温斯顿","title": "The One系列"},{"id": 4,"name": "宝格丽","title": "B.zero1系列"},{"id": 5,"name": "MiuMiu","title": "保龄球包"},{"id": 6,"name": "纪梵希","title": "纪梵希热流香水"},{"id": 7,"name": "古驰","title": "Dionysus 酒神包"},{"id": 8,"name": "YSL圣罗兰","title": "小金条1966"},{"id": 9,"name": "梵克雅宝","title": "四叶草手链"},{"id": 10,"name": "FENDI","title": "经典手袋"},{"id": 11,"name": "DIOR","title": "马鞍包"},{"id": 12,"name": "CHNAEL","title": "香奈儿5号"},{"id": 13,"name": "狐妖小红娘","title": "涂山容容"},{"id": 14,"name": "百妖谱","title": "桃夭"},{"id": 15,"name": "假面超人","title": "假面骑士"},{"id": 16,"name": "眷思量","title": "镜玄丽娘"},{"id": 17,"name": "蜡笔小新","title": "野原美冴"},{"id": 18,"name": "来往不逢人,长歌楚天碧","title": "柳宗元"},{"id": 19,"name": "念天地之悠悠,独怆然而泪下","title": "陈子昂"},{"id": 20,"name": "旧时王谢堂前燕,飞入寻常百姓家","title": "白居易乌衣巷"},{"id": 21,"name": "白日依山尽,黄河入海流","title": "王之涣"},{"id": 22,"name": "君言不得意,归卧南山陲","title": "王维"},{"id": 23,"name": "人生不相见,动如参与商","title": "杜甫赠卫八处士"},{"id": 24,"name": "寒雨连江夜入吴,平明送客楚山孤","title": "王昌龄"},{"id": 25,"name": "海客谈瀛洲,烟涛微茫信难求","title": "李白梦游天姥吟留别"},{"id": 26,"name": "落魄江湖载酒行,楚腰纤细掌中轻","title": "杜牧遣怀"},{"id": 27,"name": "故人具鸡黍,邀我至田家","title": "孟浩然"},{"id": 28,"name": "荡胸生曾云,决眦入归鸟","title": "杜甫"},{"id": 29,"name": "塔势如涌出,孤高耸天宫","title": "岑参与高适薛据同登慈恩寺浮图"},{"id": 30,"name": "臣本布衣,躬耕于南阳","title": "诸葛亮"},{"id": 31,"name": "东临碣石,以观沧海","title": "曹操"},{"id": 32,"name": "小楼昨夜又东风","title": "李煜"},{"id": 33,"name": "沙湖道中遇雨,同行皆狼狈","title": "苏轼"},{"id": 34,"name": "笑谈渴饮匈奴血","title": "岳飞"},{"id": 35,"name": "而来四万八千岁,不与秦塞通人烟","title": "蜀道难"},{"id": 36,"name": "住近湓江地低湿,黄芦苦竹绕宅生","title": "琵琶行"},{"id": 37,"name": "谈笑有鸿儒,而来无白丁","title": "陋室铭"},{"id": 38,"name": "阴风怒号,浊浪排空,日星隐曜","title": "岳阳楼记"},{"id": 39,"name": "闲云潭影日悠悠,物换星移几度秋","title": "滕王阁序"},{"id": 40,"name": "六王毕,四海一,蜀山兀,阿胖出","title": "阿房宫赋"},{"id": 41,"name": "海绵宝宝","title": "章鱼哥"},{"id": 42,"name": "fate","title": "阿尔托莉雅.潘德拉贡"},{"id": 43,"name": "第五人格","title": "红夫人"},{"id": 44,"name": "间谍过家家","title": "约尔"},{"id": 45,"name": "进击的巨人","title": "伊雷娜"},{"id": 46,"name": "及尔偕老,老使我怨","title": "氓"},{"id": 47,"name": "行道迟迟,载渴载饥。","title": "采薇"},{"id": 48,"name": "最是一年春好处,绝胜烟柳满皇都","title": "早春呈水部张十八员外"},{"id": 49,"name": "劝君更尽一杯酒,西出阳关无故人","title": "送元二使西安"},{"id": 50,"name": "明月装饰了你的窗子你装饰了别人的梦","title": "断章"},{"id": 51,"name": "天气你好样的","title": "白天晒毁我晚上吹飞我"},{"id": 52,"name": "超绝混搭风","title": "棉袄配睡裤"},{"id": 53,"name": "再也不玩抽象了","title": "第一真的有人拿我当沙贝,第二没人懂我的幽默"},{"id": 54,"name": "微笑","title": "爱笑的人法令纹不会太浅"},{"id": 55,"name": "我是皇帝","title": "啊哈:吾皇万岁万岁万万岁"}
]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/64818.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于winform的五子棋机器人系统开发 (更新中ing)

一、实物硬件表拟定 笔记本电脑、正运动控制器、三个汇川伺服驱动器、三个滑动模组 二、软件开发 注意细节&#xff1a; ①主界面使用三个panel容器进行构建 pannel容器设置属性参数&#xff1a;(1) dock ② 添加自定义控件&#xff1a;首先创建类库&#xff0c;删除默认…

微服务分布式(二、注册中心Consul)

首先我们需要安装consul,到官网下载Consul Install | Consul | HashiCorp Developer 在解压的consul目录下 执行启动命令 consul agent -dev 启动服务 -dev表示开发模式 -server表示服务模式 启动后在浏览器访问8500端口http://localhost:8500/可以看到服务管理界面 项目…

示波器--UNI-T 优利德 UT4102C 使用介绍

示波器--UNI-T 优利德 UT4102C 使用介绍 1 介绍图示特点 2 UTP04示波器探头&#xff08;100M带宽&#xff09;3 功能介绍4 示例RS232 电平信号测试 参考 1 介绍 图示 特点 2GS/s的实时采样率&#xff1a;设备能够以每秒2吉萨&#xff08;Giga Samples per second&#xff09;…

基础库正则表达式

我们已经可以用requests 库来获取网页的源代码&#xff0c;得到 HTML 代码。但我们真正想要的数据是包含在 HTML代码之中的&#xff0c;要怎样才能从 HTML,代码中获取想要的信息呢?正则表达式就是其中一个有效的方法。 本篇博客我们将了解一下正则表达式的相关用法。正则表达…

PID 控制算法理论背景:飞控领域的核心调控机制(1)

在飞控工程领域&#xff0c;PID 控制算法占据着极为关键的地位&#xff0c;是实现飞行器精确稳定控制的基石。PID 作为比例&#xff08;P&#xff09;、积分&#xff08;I&#xff09;、微分&#xff08;D&#xff09;的集成代表&#xff0c;构建起了控制系统的核心架构&#x…

复合翼与倾转旋翼飞行器:设计与控制算法对比

一、引言 复合翼&#xff08;Compound Wing&#xff09;和倾转旋翼&#xff08;Tilt - Rotor&#xff09;飞行器在现代航空领域均占据独特地位&#xff0c;二者在设计和控制算法方面展现出显著差异。这些差异在飞行模式切换、推进系统设计、控制算法复杂度以及飞行器稳定性等多…

Vue2五、自定义指令,全局局部注册、指令的值 ,插槽--默认插槽,具名插槽 ( 作用域插槽)

一、自定义指令 使用步骤 1. 注册 (全局注册 或 局部注册) &#xff0c;在 inserted 钩子函数中&#xff0c;配置指令dom逻辑 2. 标签上 v-指令名 使用 1、自定义指令&#xff08;全局&#xff09; Vue.directive("指令名"&#xff0c;{ 指令的配置项 insert…

一次BC站点渗透实录

初探 打开首页 简单信息收集: IP地址&#xff1a;美国加利福尼亚洛杉矶 无CDN 中间件:Nginx 80端口直接突破&#xff0c;故未进行端口扫描 渗透思路 一般这种BC站点&#xff0c;有几种思路可以切入&#xff1a; 1&#xff09;通过SQL注入查到管理员账号密码&#xff0c;扫描…

java 集合对象

Java 基础之集合_java集合继承关系图-CSDN博客 集合可以有序或无序&#xff0c;重复或不能重复&#xff0c;空或不能空。 List<> 集合&#xff0c;是有序&#xff0c;允许重复元素&#xff0c;允许空元素 1、ArrayList<> 非线程安全 2、LInkedList<> 非线…

web实操8-cookie

会话技术 会话&#xff1a; 一次会话中包含多次请求和响应。 客户端浏览器访问服务器的资源&#xff0c;只要客户端或者服务器端不关闭&#xff0c;这始终在一次会话范围内&#xff0c;这一次会话范围内可以包含多次请求并且收到多次相应。 一次会话&#xff1a;浏览器第一…

VMWare 的克隆操作

零、碎碎念 VMWare 的这个克隆操作很简单&#xff0c;单拎出来成贴的目的是方便后续使用。 一、操作步骤 1.1、在“源”服务器上点右键&#xff0c;选择“管理--克隆” 1.2、选择“虚拟机的当前状态”为基础制作克隆&#xff0c;如下图所示&#xff0c;然后点击“下一页” 1.3、…

JVM性能优化一:初识内存泄露-内存溢出-垃圾回收

本文主要是让你充分的认识到什么叫做内存泄露&#xff0c;什么叫做内存溢出&#xff0c;别再傻傻分不清了&#xff0c;别再动不动的升级服务器的内存了。 文章目录 1.基本概念1.1.内存泄露1.2.内存溢出1.3.垃圾回收1.4.内存泄露-垃圾回收-内存溢出三者的关系关系 2.代码示例2.…

dockfile镜像加速

运行给的终端命令 全覆盖法 {"registry-mirrors": ["https://registry.docker-cn.com","http://hub-mirror.c.163.com","https://dockerhub.azk8s.cn","https://mirror.ccs.tencentyun.com","https://registry.cn-han…

数据结构经典算法总复习(下卷)

第五章:树和二叉树 先序遍历二叉树的非递归算法。 void PreOrderTraverse(BiTree T, void (*Visit)(TElemType)) {//表示用于查找的函数的指针Stack S; BiTree p T;InitStack(S);//S模拟工作栈while (p || !StackEmpty(S)) {//S为空且下一个结点为空&#xff0c;意味着结束遍…

Windows系统上创建Flask服务器

为什么需要掌握服务器搭建技能&#xff1f; 掌握服务器搭建技能对于任何需要在线提供服务或平台的个人创意者来说都至关重要。服务器的作用是确保全球任何地方的用户都能顺利访问你的平台。因此&#xff0c;了解如何搭建和维护服务器&#xff0c;不仅能提升平台的稳定性和访问…

ISP用到的一些名词简介

这里主要记录一下在学习ISP时遇到的一些名词。 图像质量(Picture Quality) 1.锐度&#xff08;Acutance&#xff09; 锐度常用于描述边界处图像信息过渡的快慢。高反差图像过渡速度非常快&#xff0c;可以形成非常明确的边缘&#xff0c;而低反差图像存在一定的过渡缓冲&#…

SqlSugar查询达梦数据库遇到的异常情况(续)

之前的文章提到在SqlSugar的Where函数中使用!string.IsNullOrEmpty函数查询达梦数据库时&#xff0c;明明数据库中有数据但就是查不出来&#xff0c;但相同的代码在另一台电脑上就可以正常返回数据。   以下图中的两张表数据为例&#xff0c;执行下面的SQL语句无法查询到数据…

Spark优化----Spark 性能调优

目录 常规性能调优 常规性能调优一&#xff1a;最优资源配置 常规性能调优二&#xff1a;RDD 优化 RDD 复用 RDD 持久化 RDD 尽可能早的 filter 操作 常规性能调优三&#xff1a;并行度调节 常规性能调优四&#xff1a;广播大变量 常规性能调优五&#xff1a;Kryo 序列化 常规性…

ECharts柱状图-柱图42,附视频讲解与代码下载

引言&#xff1a; 在数据可视化的世界里&#xff0c;ECharts凭借其丰富的图表类型和强大的配置能力&#xff0c;成为了众多开发者的首选。今天&#xff0c;我将带大家一起实现一个柱状图图表&#xff0c;通过该图表我们可以直观地展示和分析数据。此外&#xff0c;我还将提供…

电商店铺数据集成到金蝶云星辰V2的实践经验分享

电商店铺数据集成到金蝶云星辰V2的技术案例分享 在电商业务快速发展的背景下&#xff0c;如何高效地将聚水潭平台上的电商店铺数据集成到金蝶云星辰V2系统中&#xff0c;成为了许多企业面临的重要挑战。本文将详细探讨一个实际运行的解决方案——“电商店铺->金蝶客户”&am…