- 从数组内截取部分数据展示
- 调整页码信息为:当前页 / 总页码
- 处理按钮
- 3.1 如果当前在第一页,禁用上一页按钮(添加类名disable)
- 3.2 如果当前页在最后一页(当前页 === 总页码),禁用下一页按钮(添加类名disable)
- 当前页++
- 从数组内截取部分数据展示
- 调整页码信息为:当前页 / 总页码
- 处理按钮
- 4.1 如果当前在第一页,禁用上一页按钮(添加类名disable)
- 4.2 如果当前页在最后一页(当前页 === 总页码),禁用下一页按钮(添加类名disable)
- 当前页–
- 从数组内截取部分数据展示
- 调整页码信息为:当前页 / 总页码
- 处理按钮
- 4.1 如果当前在第一页,禁用上一页按钮(添加类名disable)
- 4.2 如果当前页在最后一页(当前页 === 总页码),禁用下一页按钮(添加类名disable)
- 修改每页展示数据
- 从数组内截取部分数据展示
- 调整页码信息为:当前页 / 总页码
- 处理按钮
- 4.1 如果当前在第一页,禁用上一页按钮(添加类名disable)
- 4.2 如果当前页在最后一页(当前页 === 总页码),禁用下一页按钮(添加类名disable)
<div class="pagination">
<span class="prev disable"><span>
<span class="total">1 / 100span>
<span class="next">>span>
<select>
<option value="4">4option>
<option value="8">8option>
<option value="12">12option>
<option value="16">16option>
select>
div>
<ul>ul>
模拟数据库,外部导入数据
<script src="./dm_list.js"></script>
/**
* 1.1 从数组内截取部分数据展示
*
* 从哪里截取到哪?
*
* 假设当前每页展示4条数据
* 第1页 展示4条 ---> [0]~[3]
* 第2页 展示4条 ---> [4]~[7]
* 第3页 展示4条 ---> [8]~[11]
*
* 假设当前每页展示8条数据
* 第1页 展示8条 ---> [0]~[7]
* 第2页 展示8条 ---> [8]~[15]
*
* 开始下标:(当前页 - 1) * 每页展示多少条
* (1 - 1) * 4 === 0
* (2 - 1) * 4 === 4
* (3 - 1) * 4 === 8
* 结束下标:当前页 * 每页展示多少 - 1
* 1 * 4 - 1 == 3
* 2 * 4 - 1 == 7
* 3 * 4 - 1 == 11
*
* 假设当前页为 currentNum 每页展示 pageSize 条 数据
* 开始下标: (currentNum - 1) * pageSize
* 结束下标: currentNum * pageSize - 1
*
* 使用 数组.slice(开始下标, 结束下标) 包前不包后
* ---> 数组.slice((currentNum - 1) * pageSize, currentNum * pageSize - 1 + 1)
* ---> 数组.slice((currentNum - 1) * pageSize, currentNum * pageSize)
*/
<script>
// 0. 获取标签对象
const oUl = document.querySelector('ul'); //获取ul标签
const oTotal = document.querySelector('.total'); //页码信息
const oPrev = document.querySelectorAll('span')[0]; //上一页
const oNext = document.querySelectorAll('span')[2]; //下一页
const OSelect = document.querySelector('select'); //选择页面
// 1. 定义变量 存储数据
let currentNum = 1; //当前页面
let pageSize = 4; //展示几条数据
let totalNum = 0; //总页面
// 2. 页面渲染函数
function myFn() {
// 从数组中截取数据
let newList = list.slice((currentNum - 1) * pageSize, currentNum * pageSize);
// 将截取的数据,渲染到页面中
oUl.innerHTML = newList.reduce(function (prev, item) {
return prev + `
-
${item.pic}
" alt="">
${item.name}
城市:
${item.city}
地址:
${item.address}
价格:
${item.price}
时间:
${item.showTime}
`;
}, '')
// 调整页码信息
totalNum = Math.ceil(list.length / pageSize);
// 将页码信息渲染到页面去
oTotal.innerHTML = `${currentNum}/${totalNum}`;
// 处理按钮
// 如果当前在第一页,禁用上一页按钮 (添加类名disable)
// if (currentNum === 1) {
// oPrev.className = 'prev disable';
// } else {
// oPrev.className = 'prev disable';
// }
// 三元运算符
// currentNum === 1 ? oPrev.className = 'prev disable' : oPrev.className = 'prev';
oPrev.className = currentNum === 1 ? 'prev disable' : 'prev';
// 如果当前页在最后一页(当前页 === 总页码)禁用下一页按钮 (添加类名disable)
oNext.className = currentNum === totalNum ? 'prev disable' : 'prev';
}
// 3. 首页打开页面 直接调用函数
myFn();
// 4. 点击下一页,下一页的效果
oNext.addEventListener('click', function(){
// 边界判断
if (currentNum == totalNum) return;
// 当前页面++
currentNum++;
// 调用函数 渲染页面
myFn();
})
oPrev.addEventListener('click', function(){
// 边界判断
if (currentNum == 1) return;
// 当前页面++
currentNum--;
// 调用函数 渲染页面
myFn();
})
// 5. 改变页面展示数据
OSelect.addEventListener('change', function(){
pageSize = OSelect.value;
currentNum = 1;
// 调用函数 渲染页面
myFn();
})
</script>