用JavaScript实现分页功能

一.  HTML 部分代码及代码解释

        本节包括 HTML 页面构造和代码。

1.1 HTML 页面构造

        HTML 页面分为三个部分,分别是:

  • <table> 标签包裹的表格部分,表格内容由 JavaScript 页面加载出来。
  • <div> 标签包裹的换页部分,控制页面切换。
  • <label> 标签包裹的 select 下拉框,下拉框中出现的数字为列表加载数量。

1.2 图片使用的建议

        图片在网站上传带水印,暂时不会去掉,大家将就着用,用其他的图片也是可以的。图片只起到一个标记作用,所以不必纠结。

图片名字和引用:

        <img src="Previous.png" οnclick="previous()" alt="上一页的图片">

        <img src="next.png" οnclick="next()" alt="下一页的图片">

        

复制代码时,使用自己图片的话,记得保持图片名字一致。

 

1.3 代码部分

       HTML 部分代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>分页</title>

    <link rel="stylesheet" href="index.css">
</head>
<body>
    <!-- 表格渲染部分 -->
    <table id="table">

    </table>
    
    <!-- 换页部分 -->
    <div class="bottom">
        <img src="Previous.png" onclick="previous()" alt="上一页的图片">

        <div id="page" class="page">
            1
        </div>

        <img src="next.png" onclick="next()" alt="下一页的图片">
    </div>

    <!-- 加载页面中数据量 -->
    <label for="fenYe">
        下次加载
            <select name="fenYe" id="fenYe">
                <option value="5">5</option>
                <option value="10">10</option>
                <option value="15">15</option>
            </select>
        条数据
    </label>

</body>

<script type="text/javascript" src="index.js"></script>
</html>

二. CSS 部分代码及代码解释

        CSS 代码部分根据作业喜好方式设置的,代码实现是没问题的。如果感觉不合适的话,可以自己调动成自己喜欢的样式。

 2.1 代码部分解释

border-collapse 属性是用来决定表格的边框是分开的还是合并的。

border-collapse: collapse;

        相邻的单元格共用同一条边框。

 

border-collapse: separate;

        每个单元格拥有独立的边框。(默认值)

         

border-collapse: separate;

 border-collapse: collapse;

vertical-align: 属性设置元素垂直方向的对齐方式。

vertical-align:middle; 把此元素放置在父元素的中部。 

vertical-align:top; 把元素的顶端与行中最高元素的顶端对齐 。

vertical-align:bottom; 把元素的顶端与行中最低的元素的顶端对齐。 

2.2 代码部分

        CSS 样式设计的极为简单,大家可以根据自己的喜好更改。

table{
    width: 100%;
    border-collapse: collapse;
}

table caption{
    font-size: 2em;
    font-weight: bold;
    margin: 1em 0;
}

th,td{
    border: 1px solid #999;
    text-align: center;
    padding: 20px 0;
}




/* ----------------------------------------分隔符---------------------------------------- */

.bottom{
    width: 100%;
    text-align: center;
}


img{
    width: 50px;
    height: 50px;
    vertical-align: middle;/* 水平对齐 */
}


.page{
    display: inline-block;
    font-size:50px;
    padding: 0;
    vertical-align: middle;
}

/* ----------------------------------------分隔符---------------------------------------- */

三. JS 部分代码及代码解释       

 3.1 代码逻辑

  1. 自定义数据
  2. 获取数据
    • 获取当前页面分页部分数据
    • 获取 select 下拉框值
    • 获取在此页面中数据最多能加载几页
  3. 渲染数据
    • 没有使用事件监听功能

    • 判断页面显示数据量是否切换

    • 生成数据

  4. 定义切换页面函数,通过给图片添加点击事件实现。
  5. 加载生成数据的函数

3.2 函数解析

         Math.ceil() :向上舍入,并返回大于等于给定数字的最小整数。

console.log(Math.ceil(0.5));
// 输出结果: 1

console.log(Math.ceil(2));
// 输出结果: 2

console.log(Math.ceil(6.05));
//输出结果: 7

console.log(Math.ceil(-1.004));
// 输出结果: : -1

3.3 代码部分 

// 自定义数据
let dataList = [
    {
        title: "标题1",
        content: "内容1",
    },
    {
        title: "标题2",
        content: "内容2",
    },
    {
        title: "标题3",
        content: "内容3",
    },
    {
        title: "标题4",
        content: "内容4",
    },
    {
        title: "标题5",
        content: "内容5",
    },
    {
        title: "标题6",
        content: "内容6",
    },
    {
        title: "标题7",
        content: "内容7",
    },
    {
        title: "标题8",
        content: "内容8",
    },
    {
        title: "标题9",
        content: "内容9",
    },
    {
        title: "标题10",
        content: "内容10",
    },
    {
        title: "标题11",
        content: "内容11",
    },
    {
        title: "标题12",
        content: "内容12",
    },
    {
        title: "标题13",
        content: "内容13",
    },
    {
        title: "标题14",
        content: "内容14",
    },
    {
        title: "标题15",
        content: "内容15",
    },
    {
        title: "标题16",
        content: "内容16",
    },
    {
        title: "标题17",
        content: "内容17",
    },
    {
        title: "标题18",
        content: "内容18",
    },
    {
        title: "标题19",
        content: "内容19",
    },
    {
        title: "标题20",
        content: "内容20",
    },
    {
        title: "标题21",
        content: "内容21",
    },
    {
        title: "标题22",
        content: "内容22",
    },
    {
        title: "标题23",
        content: "内容23",
    },
    {
        title: "标题24",
        content: "内容24",
    },
];

// 获取 id 为 page 的内容,也就是两个箭头中间部分
let page = document.getElementById("page")

// 获取下拉框中的数据
let selectNumber = Number(document.getElementById("fenYe").value)

pageNumber = (page.innerText - 1) * selectNumber

// 总页数
// ceil 想上取整的函数 例如 Math.ceil(0.1)  === 1
let sumPage = Math.ceil(dataList.length / selectNumber)

// 函数功能:前往上一页
function previous(){
    // 获取此时该页面是第几页
    let testNum = page.innerText


    if(testNum > 1){

        page.innerText = page.innerText -1
        pageNumber = (page.innerText - 1) * selectNumber
        document.getElementById("table").innerHTML = ""
        loading(pageNumber)
    }else{
        alert("已经是第一页")
    }

}

// 函数功能:前往下一页
function next(){
    // 获取此时该页面是第几页
    let testNum = document.getElementById("page").innerText

    sumPage = Math.ceil(dataList.length / selectNumber)

    console.log(testNum,sumPage)
    if(testNum < sumPage){

        page.innerText =  Number(testNum) + 1
        pageNumber = (document.getElementById("page").innerText - 1) * selectNumber
        document.getElementById("table").innerHTML = ""

        loading(pageNumber)

    }else{
        alert("已经是最后一页")
    }

}


/*渲染数据*/
function loading(pageNumber){

    // 没有使用事件监听功能
    let nowSelectNumber = Number(document.getElementById("fenYe").value)

    // 判断页面显示数据量是否切换
    if(nowSelectNumber !== selectNumber){
        selectNumber = nowSelectNumber
        pageNumber = 0
        page.innerText = 1
    }

    // 获取到表格,对表格表头和总标题进行定义
    let table = document.getElementById("table")
    let caption = document.createElement("caption")
    let tr = document.createElement("tr")
    let firstTh = document.createElement("th")
    let secondTh = document.createElement("th")

    // 对定义的数据赋值    
    caption.innerText = "数据表(总标题)"  
    firstTh.innerText = "标题"
    secondTh.innerText = "内容"

    // 将定义的数据添加到合适的位置
    table.appendChild(caption)
    table.appendChild(tr)
    tr.appendChild(firstTh)
    tr.appendChild(secondTh)

    // 渲染数据
    for (let i = pageNumber; i < pageNumber + selectNumber; i++) {

        if(i === dataList.length){
            break;
        } 
        let table = document.getElementById("table");
    
        
        let tr = document.createElement("tr");
        let tdTitle = document.createElement("td");
        let tdContent = document.createElement("td");
    
        tdTitle.innerText = dataList[i].title;
        tdContent.innerText = dataList[i].content;
    
        tr.appendChild(tdTitle);
        tr.appendChild(tdContent);
    
        table.appendChild(tr);       
        
        console.log(pageNumber)
    }
    
}

loading(pageNumber);

四.成果展示

五.注意事项

        数据是作者批量生成的,等到大家真正开发项目的时候。这些数据后端都会写好传递过来,我们写好自己的代码逻辑就好。

        本文中没有使用事件监听器,大家感兴趣的话可以自己添加或者改动。

  • 13
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值