zoukankan      html  css  js  c++  java
  • 实现表格分页

    由于工作需要,经常在开发中需要实现表格分页这种特效,目的的为提升用户体验,减少大数据渲染数量。

    分页的分两种,一种是要和服务器交互,另一种是一次性拿到所有数据,在本地做分页处理。本次主要谈论第二种。

    分页原理很简单,无非就是数组切片。

    最关键是这两句:

    var startRow = (currentPage - 1) * pageSize;  //currentPage 为当前页,pageSize为每页显示的数据量
    var endRow = currentPage * pageSize -1;

    比如我们要将数据每页5条展示,那么第一页的开始行就为 (1-1)* 5 = 0;结束行就为 1 * 5 - 1  = 4 (数组下标从0开始),依次类推,

    第二页开始行就为 (2-1)* 5 = 5;结束行就为 2 * 5 - 1  = 9

    找到我们需要显示的行的范围然后进行渲染操作

    下面是一个简单的表格分页效果

    本文仅做个人学习记录之用,如有错误之处,还请网页纠正,谢谢

    <!DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    	<title>Document</title>
    	<!-- <link href="https://cdn.bootcss.com/bootstrap/4.0.0-alpha.5/css/bootstrap-flex.css" rel="stylesheet"> -->
    	<style>
    		*{
    			margin: 0;
    			padding: 0;
    		}
    		ul li{
    			display: inline-block;
    			margin-right: 10px;
    		}
    	</style>
    </head>
    <body >
    	<div style=" 80%;margin:0 auto">
    		<table style="text-align: center;border-collapse:collapse;  100%" border="1" >
    			<thead>
    				<tr>
    					<th>ID</th>
    					<th>用户名</th>
    					<th>年龄</th>
    					<th>毕业学校</th>
    					<th>备注</th>
    				</tr>
    			</thead>
    			<tbody id="listbox">
    				
    			</tbody>
    		</table>
    		<nav style="100%;margin-top:20px";>
    			<ul style="100%;display:flex;justify-content:space-between" >
    				<li id="last">上一页</li>
    				<li id="next">下一页</li>
    				<li id="">共<span id='pages'></span>页</li>
    				<li>共<span id="num"></span></li>
    				<li>当前第<span id="currentNum" ></span>页</li>
    				<li>
    					<select name="" id="select" >
    						<option value="1">1</option>
    						<option value="3"  selected = "selected">3</option>
    						<option value="5" >5</option>
    						<option value="10">10</option>
    						<option value="15">15</option>
    					</select></li>
    					<li id="first">首页</li>
    					<li id="end">尾页</li>           
    				</ul>
    			</nav>
    		</div>
    		<script>
    			var data = {
    				rows: [
    				{ Id: 1, Name: '小明', Age: 18, School: '光明小学', Remark: '三好学生' },
    				{ Id: 2, Name: '小刚', Age: 20, School: '复兴中学', Remark: '优秀班干部' },
    				{ Id: 3, Name: '吉姆格林', Age: 19, School: '光明小学', Remark: '吉姆做了汽车公司经理' },
    				{ Id: 4, Name: '李雷', Age: 25, School: '复兴中学', Remark: '不老实的家伙' },
    				{ Id: 5, Name: '韩梅梅', Age: 22, School: '光明小学', Remark: '在一起' },
    				{ Id: 6, Name: '小明', Age: 18, School: '光明小学', Remark: '三好学生' },
    				{ Id: 7, Name: '小刚', Age: 20, School: '复兴中学', Remark: '优秀班干部' },
    				{ Id: 8, Name: '吉姆格林', Age: 19, School: '光明小学', Remark: '吉姆做了汽车公司经理' },
    				{ Id: 9, Name: '李雷', Age: 25, School: '复兴中学', Remark: '不老实的家伙' },
    				{ Id: 10, Name: '韩梅梅', Age: 22, School: '光明小学', Remark: '在一起' },
    				{ Id: 11, Name: '小明', Age: 18, School: '光明小学', Remark: '三好学生' },
    				{ Id: 12, Name: '小刚', Age: 20, School: '复兴中学', Remark: '优秀班干部' },
    				{ Id: 13, Name: '吉姆格林', Age: 19, School: '光明小学', Remark: '吉姆做了汽车公司经理' },
    				{ Id: 14, Name: '李雷', Age: 25, School: '复兴中学', Remark: '不老实的家伙' },
    				{ Id: 15, Name: '韩梅梅', Age: 22, School: '光明小学', Remark: '在一起' },
    				{ Id: 16, Name: '小明', Age: 18, School: '光明小学', Remark: '三好学生' },
    				{ Id: 17, Name: '小刚', Age: 20, School: '复兴中学', Remark: '优秀班干部' },
    				{ Id: 18, Name: '吉姆格林', Age: 19, School: '光明小学', Remark: '吉姆做了汽车公司经理' },
    				{ Id: 19, Name: '李雷', Age: 25, School: '复兴中学', Remark: '不老实的家伙' },
    				{ Id: 20, Name: '韩梅梅', Age: 22, School: '光明小学', Remark: '在一起' },
    				],
    			};		
    			var current = 1;
    			function pageInit(currentPage,pagesize){
    			current = currentPage;//将当前页存储全局变量
    			pageCount = Math.ceil(data.rows.length / pagesize);//一共分多少页
    			currentNum.innerHTML = currentPage;
    			num.innerHTML = data.rows.length +"条";
    			pages.innerHTML = pageCount;
    			var startRow = (currentPage - 1) * pagesize;//开始显示的行 
    			var endRow = currentPage * pagesize - 1;//结束显示的行
    			var endRow = (endRow > data.rows.length) ? data.rows.length : endRow;//如果结束行数大于总数目,显示总数目,否则结束行
    			var html = "";
    			for(var i = 0; i < data.rows.length; i++){
    						if(i >= startRow && i <= endRow ){//通过间隔分隔数组
    							html += "<tr>
    							<td>"+data.rows[i].Id+"</td>
    							<td>"+data.rows[i].Age+"</td>
    							<td>"+data.rows[i].School+"</td>
    							<td>"+data.rows[i].Name+"</td>
    							<td>"+data.rows[i].Remark+"</td>
    						</tr>"			
    					}			
    				}
    
    				listbox.innerHTML = html;
    			}
    			
    			select.onchange = function(ev){
    				pageInit(1,this.value)
    			}
    			first.onclick = function(){
    				pageInit(1,select.value)
    			}
    			end.onclick = function(){
    				pageInit(pageCount,select.value)	
    			}
    
    			next.onclick = function(){
    				var curr = current +1;
    				if(curr>pageCount){
    					return
    				}
    				pageInit(curr,select.value)
    			}
    
    			last.onclick =function(){
    				var curr = current - 1;
    				if(curr<1){
    					return 
    				}
    				pageInit(curr,select.value)
    			}
    			pageInit(1,3)
    
    		</script>
    
    	</body>
    	</html>
    

      

  • 相关阅读:
    使用pycharm专业版(支持远程调试及运行)如何运行mpi的代码呢???(mpi4py的代码)
    使用MPI时执行代码时运行命令中参见的几种参数设置
    多网卡系统下如何使用tcp协议实现MPI的分布式多机运行(mpi的实现使用openmpi)
    为什么我要弃用华为的软件产品——mindspore从入门到放弃之感想
    网络文件系统nfs服务端配置客户端权限时的demo例子
    【转载】 NFS服务器端的权限设置学习 Linux运维学习
    Ubuntu18.04系统下网络文件系统nfs的安装及简单配置
    【转载】 Sun RPC 编程简介
    【转载】 SUN RPC的传输层实现机制 —— rpcbind(nfs文件系统中的rpc)
    【转载】sun的rpc ——rpcbind(nfs文件系统中的rpc)
  • 原文地址:https://www.cnblogs.com/CDtao/p/7281444.html
Copyright © 2011-2022 走看看