几个分页的方法(转载)
代码如下:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>js分页效果</title>
<style>
* {
margin:0;
padding:0;
}
img {
border:0;
}
ol,ul,li {
list-style:none;
}
.box {
width:100%;
height:500px;
position:relative;
}
#conten {
width:400px;
height:320px;
margin:20px auto;
border:1px solid #ccc;
overflow:hidden;
}
#conten li {
width:100%;
height:40px;
border-bottom:1px solid #ff0000;
}
#btn {
width:180px;
height:30px;
margin:20px auto;
border:1px solid #ccc;
padding:5px 10px;
position:relative;
overflow:hidden;
}
</style>
</head>
<body>
<div class="box">
<ul id="conten">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>9</li>
<li>10</li>
<li>11</li>
<li>12</li>
<li>13</li>
<li>14</li>
<li>15</li>
<li>16</li>
<li>17</li>
<li>18</li>
<li>19</li>
<li>20</li>
<li>21</li>
<li>22</li>
<li>23</li>
<li>24</li>
<li>25</li>
<li>26</li>
<li>27</li>
<li>28</li>
<li>29</li>
<li>30</li>
<li>31</li>
<li>32</li>
<li>33</li>
<li>34</li>
<li>35</li>
<li>36</li>
<li>37</li>
<li>38</li>
<li>39</li>
<li>40</li>
<li>41</li>
<li>42</li>
<li>43</li>
<li>44</li>
<li>45</li>
<li>46</li>
<li>47</li>
<li>48</li>
<li>34</li>
<li>35</li>
<li>36</li>
<li>37</li>
<li>38</li>
<li>39</li>
<li>40</li>
<li>41</li>
<li>42</li>
<li>43</li>
<li>44</li>
<li>45</li>
<li>46</li>
<li>47</li>
<li>48</li>
<li>34</li>
<li>35</li>
<li>36</li>
<li>37</li>
<li>38</li>
<li>39</li>
<li>40</li>
<li>41</li>
<li>42</li>
<li>43</li>
<li>44</li>
<li>45</li>
</ul>
<ul id="btn">
</ul>
</div>
<script>
//总结:分页必须要搞清楚几个参数:1、一共几条数据 2、每页显示几条数据(x) 3、一共几页
// 难点:点击第n页时,显示哪几条数据(n-1)*x+1~n*x条数据(n>=1)
window.onload = function() {
var oConten = document.getElementById("conten");
var oLi = oConten.getElementsByTagName("li");
var bBtn = document.getElementById("btn");
var n = 0;//页面数量(重点)
// 页面内容控制
if (oLi.length % 8 == 0) {//计算页数
n = oLi.length / 8 | 0;//Math.floor()
} else {
n = (oLi.length / 8 | 0) + 1;//Math.ceil()
}
//添加页码标签(几个页面就添加几个页码)
for (var i = 1; i <= n; i++) {
cLi = document.createElement("li");
cLi.style.cssText = "width:30px; height:30px; background:#ff0000;margin:0 5px;display: inline-block;position:absolute; transition:left 0.5s";
cLi.innerHTML = i;
bBtn.appendChild(cLi);
}
var aLi = bBtn.getElementsByTagName("li");
for (var i = 0; i <= n - 1; i++) {
aLi[i].index = i;
aLi[0].style.background = "#ccc";
aLi[i].style.left = i * 40 + "px";
// alert(aLi[i].index)
//点击页码做3件事
aLi[i].onclick = function() {
b = this.index;
// alert(b)
// 1.当前页码active(简单功能)
for (var j = 0; j < aLi.length; j++) {
aLi[j].style.background = "#ff0000";
}
this.style.background = "#ccc";
//2.页码滚动(该功能可有可无)
if (b <= 2) {
for (var j = 0; j < aLi.length; j++) {
aLi[j].style.left = j * 40 + "px";
}
}
if (b > 2 && b < (n - 2)) {
for (var j = 0; j < aLi.length; j++) {
aLi[j].style.left = (j - b + 2) * 40 + "px";
}
}
//3.页面切换
for (var j = 0; j < oLi.length; j++) {//点击第b页,先让 所有页面隐藏
oLi[j].style.display = "none";
}
for (var j = (b * 8); j < (b + 1) * 8; j++) {//再显示第 b * 10条 至 (b + 1) * 8-1条数据(b>=0)(重难点)
oLi[j].style.display = "block";
}
}
}
}
</script>
</body>
</html>
效果如下(CSS略显简陋)
方法二:
<html>
<head>
<meta charset='utf-8'>
<script type="text/javascript" src="page.js"></script>
<style type="text/css">
#idData {color: red;border: solid;text-align: center;}
a{text-decoration: none; color: rgb(0, 170, 255);}
</style>
</head>
<body onLoad="goPage(1,10);">
<table id="idData" width="70%">
<tr><td>liujinzhong1</td><td>25</td><td>男</td><td>山西吕梁</td></tr>
<tr><td>liujinzhong2</td><td>25</td><td>男</td><td>山西吕梁</td></tr>
<tr><td>liujinzhong3</td><td>25</td><td>男</td><td>山西吕梁</td></tr>
<tr><td>liujinzhong4</td><td>25</td><td>男</td><td>山西吕梁</td></tr>
<tr><td>liujinzhong5</td><td>25</td><td>男</td><td>山西吕梁</td></tr>
<tr><td>liujinzhong6</td><td>25</td><td>男</td><td>山西吕梁</td></tr>
<tr><td>liujinzhong7</td><td>25</td><td>男</td><td>山西吕梁</td></tr>
<tr><td>liujinzhong8</td><td>25</td><td>男</td><td>山西吕梁</td></tr>
<tr><td>liujinzhong9</td><td>25</td><td>男</td><td>山西吕梁</td></tr>
<tr><td>liujinzhong10</td><td>25</td><td>男</td><td>山西吕梁</td></tr>
<tr><td>liujinzhong11</td><td>25</td><td>男</td><td>山西吕梁</td></tr>
<tr><td>liujinzhong12</td><td>25</td><td>男</td><td>山西吕梁</td></tr>
<tr><td>liujinzhong13</td><td>25</td><td>男</td><td>山西吕梁</td></tr>
<tr><td>liujinzhong14</td><td>25</td><td>男</td><td>山西吕梁</td></tr>
<tr><td>liujinzhong15</td><td>25</td><td>男</td><td>山西吕梁</td></tr>
<tr><td>liujinzhong16</td><td>25</td><td>男</td><td>山西吕梁</td></tr>
<tr><td>liujinzhong17</td><td>25</td><td>男</td><td>山西吕梁</td></tr>
<tr><td>liujinzhong18</td><td>25</td><td>男</td><td>山西吕梁</td></tr>
<tr><td>liujinzhong19</td><td>25</td><td>男</td><td>山西吕梁</td></tr>
<tr><td>liujinzhong20</td><td>25</td><td>男</td><td>山西吕梁</td></tr>
<tr><td>liujinzhong21</td><td>25</td><td>男</td><td>山西吕梁</td></tr>
<tr><td>liujinzhong22</td><td>25</td><td>男</td><td>山西吕梁</td></tr>
<tr><td>liujinzhong23</td><td>25</td><td>男</td><td>山西吕梁</td></tr>
<tr><td>liujinzhong24</td><td>25</td><td>男</td><td>山西吕梁</td></tr>
<tr><td>liujinzhong25</td><td>25</td><td>男</td><td>山西吕梁</td></tr>
<tr><td>liujinzhong26</td><td>25</td><td>男</td><td>山西吕梁</td></tr>
<tr><td>liujinzhong27</td><td>25</td><td>男</td><td>山西吕梁</td></tr>
<tr><td>liujinzhong28</td><td>25</td><td>男</td><td>山西吕梁</td></tr>
<tr><td>liujinzhong29</td><td>25</td><td>男</td><td>山西吕梁</td></tr>
<tr><td>liujinzhong30</td><td>25</td><td>男</td><td>山西吕梁</td></tr>
<tr><td>liujinzhong31</td><td>25</td><td>男</td><td>山西吕梁</td></tr>
<tr><td>liujinzhong32</td><td>25</td><td>男</td><td>山西吕梁</td></tr>
<tr><td>liujinzhong33</td><td>25</td><td>男</td><td>山西吕梁</td></tr>
<tr><td>liujinzhong34</td><td>25</td><td>男</td><td>山西吕梁</td></tr>
<tr><td>liujinzhong35</td><td>25</td><td>男</td><td>山西吕梁</td></tr>
<tr><td>liujinzhong36</td><td>25</td><td>男</td><td>山西吕梁</td></tr>
<tr><td>liujinzhong37</td><td>25</td><td>男</td><td>山西吕梁</td></tr>
<tr><td>liujinzhong38</td><td>25</td><td>男</td><td>山西吕梁</td></tr>
<tr><td>liujinzhong39</td><td>25</td><td>男</td><td>山西吕梁</td></tr>
<tr><td>liujinzhong40</td><td>25</td><td>男</td><td>山西吕梁</td></tr>
</table>
<table width="60%" align="right">
<tr><td><div id="barcon" name="barcon"></div></td></tr>
</table>
<script>
/**
* 分页函数
* pno--页数
* psize--每页显示记录数
* 分页部分是从真实数据行开始,因而存在加减某个常数,以确定真正的记录数
* 纯js分页实质是数据行全部加载,通过是否显示属性完成分页功能
**/
function goPage(pno,psize){
var itable = document.getElementById("idData");
var num = itable.rows.length;//表格所有行数(所有记录数)
console.log(num);
var totalPage = 0;//总页数
var pageSize = psize;//每页显示行数
//总共分几页
if(num/pageSize > parseInt(num/pageSize)){
totalPage=parseInt(num/pageSize)+1;
}else{
totalPage=parseInt(num/pageSize);
}
var currentPage = pno;//当前页数
var startRow = (currentPage - 1) * pageSize+1;//开始显示的行 31
var endRow = currentPage * pageSize;//结束显示的行 40
endRow = (endRow > num)? num : endRow; 40
console.log(endRow);
//遍历显示数据实现分页
for(var i=1;i<(num+1);i++){
var irow = itable.rows[i-1];
if(i>=startRow && i<=endRow){
irow.style.display = "block";
}else{
irow.style.display = "none";
}
}
var pageEnd = document.getElementById("pageEnd");
var tempStr = "共"+num+"条记录 分"+totalPage+"页 当前第"+currentPage+"页";
if(currentPage>1){
tempStr += "<a href=\"#\" onClick=\"goPage("+(1)+","+psize+")\">首页</a>";
tempStr += "<a href=\"#\" onClick=\"goPage("+(currentPage-1)+","+psize+")\"><上一页</a>"
}else{
tempStr += "首页";
tempStr += "<上一页";
}
if(currentPage<totalPage){
tempStr += "<a href=\"#\" onClick=\"goPage("+(currentPage+1)+","+psize+")\">下一页></a>";
tempStr += "<a href=\"#\" onClick=\"goPage("+(totalPage)+","+psize+")\">尾页</a>";
}else{
tempStr += "下一页>";
tempStr += "尾页";
}
document.getElementById("barcon").innerHTML = tempStr;
}
</script>
</body>
</html>