记录我学习JS的记录
都是自己人,分页功能的学习也是为了方便用户的一个功能,在网页进行大量数据展示的时候,可以通过分页技术来将数据分成若干页面展示每次请求查询,不需要查询所有,通过定制页码或者别的方式,只需要查询数据的一 部分,将数据看作一本书,通过页码可以跳转可见数据,直到找到自己想要的就OK啦 是不是很方便呢 下面是效果图
样式因人而异,我的样式做的不是很好 这边主要是实现JS功能
咱!直接上代码
HTML:
<table border="1" cellspacing="0" cellpadding="20" class="table">
<thead>
<tr>
<td><input type="checkbox" onclick="all_choose()" id="all"></td>
<th>序号</th>
<th>姓名</th>
<th>年龄</th>
<th>地址</th>
</tr>
</thead>
<tbody id="tbody">
</tbody>
</table>
<div class="bottom">
<select class="selects" onchange="(event)">
<option value="5">每页5条</option>
<option value="10">每页10条</option>
<option value="15">每页15条</option>
<option value="20">每页20条</option>
</select>
<div>共</div>
<div>23</div>
<div>条</div>
<div class="paging">
</div>
<div class="inpt" style="display: flex;">
<span>前往第</span>
<input type="number" value="" style="width: 20%; margin: 0 5px;" id="go">
页
</div>
</div>
</div>
CSS样式:
*{
margin: 0;
padding: 0;
}
.bottom {
margin-top: 20px;
display: flex;
align-items: center;
}
.bottom div {
margin-left: 5px;
}
.paging {
display: flex;
align-items: center;
}
.paging div {
display: flex;
align-items: center;
justify-content: center;
width: 30px;
height: 30px;
text-align: center;
line-height: 15px;
border: 1px solid #EEEEEE;
border-radius: 6px;
}
.paging span {
display: block;
width: 30px;
height: 30px;
text-align: center;
line-height: 15px;
border: 1px solid #EEEEEE;
border-radius: 6px;
display: flex;
align-items: center;
justify-content: center;
margin: 0 6px;
}
.table th,
td {
width: 23vh;
text-align: center;
}
.selects {
width: 30%;
}
下面就是最重要的JS部分:
首先要获取初始数据(用数组包对象的形式) 比如你要填入的信息 这边就写一下常用的 id代表序号 name代表名字 age代表年龄 address代表地点
let data = [{
id: 1,
name: '张三',
age: '18',
address: '河南'
}, {
id: 2,
name: '张三',
age: '18',
address: '河南'
}, {
id: 3,
name: '张三',
age: '18',
address: '河南'
}, {
id: 4,
name: '张三',
age: '18',
address: '河南'
}, {
id: 5,
name: '张三',
age: '18',
address: '河南'
}, {
id: 6,
name: '张三',
age: '18',
address: '河南'
}, {
id: 7,
name: '张三',
age: '18',
address: '河南'
}, {
id: 8,
name: '张三',
age: '18',
address: '河南'
}, {
id: 9,
name: '张三',
age: '18',
address: '河南'
}, {
id: 10,
name: '张三',
age: '18',
address: '河南'
}, {
id: 11,
name: '张三',
age: '18',
address: '河南'
}, {
id: 12,
name: '张三',
age: '18',
address: '河南'
}, {
id: 13,
name: '张三',
age: '18',
address: '河南'
}, {
id: 14,
name: '张三',
age: '18',
address: '河南'
}, {
id: 15,
name: '张三',
age: '18',
address: '河南'
}, {
id: 16,
name: '张三',
age: '18',
address: '河南'
}, {
id: 17,
name: '张三',
age: '18',
address: '河南'
}, {
id: 18,
name: '张三',
age: '18',
address: '河南'
}, {
id: 19,
name: '张三',
age: '18',
address: '河南'
}, {
id: 20,
name: '张三',
age: '18',
address: '河南'
}, {
id: 21,
name: '张三',
age: '18',
address: '河南'
}, {
id: 22,
name: '张三',
age: '18',
address: '河南'
}, {
id: 23,
name: '张三',
age: '18',
address: '河南'
}, ]
let tbody = document.getElementById('tbody');
let page = 5; //一页显示5行数据
let num = 0; //显示的是在第几页 因为是下标计算 第一页就是0 以此类推
let selects = document.getElementsByClassName('selects')[0];
//获取初始数据
let c = 0;
let a = 0;
//首次需要先渲染一次哦!!
其次开始渲染页面
renders();
function renders() {
let str = '';
for (let i = num * page; i < (num + 1) * page; i++) {
if (data[i]) {
// console.log(data);
str += `<tr>
<td>
<input type="checkbox" class="one_choose" onclick="checkone()">
</td>
<td>${data[i].id}</td>
<td>${data[i].name}</td>
<td>${data[i].age}</td>
<td>${data[i].address}</td>
</tr>`
}
}
tbody.innerHTML = str;
render_paging();
}
//渲染
然后还要渲染底部导航页面左右的页面
function render_paging() {
let str = `<div onclick="left()"> < </div>`;
let count = Math.ceil(data.length / page);
c = count;
for (let i = 0; i < count; i++) {
str +=
`<span style="background-color:${num == i ? 'gray' : '#EEEEEE'}" onclick="gogo_througth(${i})" class="go_througth">${i+1}</span>`;
}
str += `<div onclick="right()">></div>`;
document.getElementsByClassName('paging')[0].innerHTML = str;
}
//渲染左右按钮和页数
接下来是给左右图标添加绑定事件
function right() {
let count = Math.ceil(data.length / page);
if (num < count - 1) {
num++;
all.checked = false;
renders();
} else {
alert('我也是有底线的哦~');
}
}
//右按钮
function left() {
if (num > 0) {
num--;
all.checked = false;
renders();
} else {
alert('都第一页了你还要干嘛?');
}
}
//左按钮
给下拉选项框添加onchange事件 以及全选和单选的实现
selects.addEventListener("change", function() {
page = this.value
num = 0;
renders()
})
//给下拉框添加onchange事件
let all = document.getElementById('all');
function all_choose() {
let one_choose = document.getElementsByClassName('one_choose');
let len = one_choose.length;
// console.log(all.checked);
// console.log(one_choose);
for (let i = 0; i < len; i++) {
//当全选按钮为true时,全部按钮都为true,否则相反
if (all.checked == true) {
one_choose[i].checked = true;
} else {
one_choose[i].checked = false;
}
}
}
//实现全选按钮函数
function checkone() {
let one_choose = document.getElementsByClassName('one_choose');
let len = one_choose.length;
a = 0
//当单选按钮都为true时,全选按钮也为true,否则为false
for (let i = 0; i < len; i++) {
if (one_choose[i].checked == true) {
a++;
// console.log(all);
if (a == page) {
all.checked = true;
} else {
all.checked = false;
}
}
}
}
//实现单选选按钮函数
后面结尾在作业简单的优化 比如给input绑定一下回车事件等等
let go = document.getElementById('go');
let go_througth = document.getElementsByClassName('go_througth');
function gogo_througth(i) {
all.checked = false;
console.log(i);
// one_choose[i].checked = false;
num = i;
renders();
}
//页数数字点击自动跳转
go.addEventListener('keydown', function(e) {
// all.checked = false;
// 判断是否按下了回车键
if (e.keyCode === 13) {
// 在这里处理回车事件
if (go.value != parseInt(go.value)) {
go.value = parseInt(go.value)
console.log(go.value);
}
if (go.value == parseInt(go.value)) {
if (go.value <= c && go.value > 0) {
// console.log(go.value);
num = go.value - 1;
all.checked = false;
renders();
} else {
alert('你选的页面不对');
go.value = '';
}
}
}
});
//input绑定回车事件
以上就是JS实现简单分页功能 本人也还在学习阶段 有大佬看到的话可以提出一些优化建议和指导