JavaScript小案例------js实现分页插件效果篇

原生js实现分页插件效果

分页插件效果

分页插件效果需求:

网站千千万,分页插件几乎全都有,大部分都有这个功能。所以我讲解一下用原生js来写分页插件效果。
分页插件主要就是显示当前页面,和首页,尾页,上一页,下一页等功能的实现。当然具体的功能下面来说。话不多说,开干!

效果图:

当然是先上效果图啦,当然代码的实现运行效果上面就有。
在这里插入图片描述

HTML&CSS代码:
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>分页插件</title>
    <link rel="stylesheet" href="./index.css">
</head>

<body>
    <div id="pagercontainer"></div>

    <script src="./idnex.js"></script>
    <script>
        var pagercontainer = document.getElementById('pagercontainer');
        // 1. 当前页码  2. 总页码数 3. 中间的分页项目的个数 4. 放入哪个容器
        createPager(25, 50, 5, pagercontainer);
    </script>
</body>

</html>

HTML中含有js代码,我会再js中给出解释,这里不做解释

#pagercontainer {
    margin-top: 100px;
    text-align: center;
}

a {
    font-size: 25px;
    border: 1px solid #e1e2e3;
    color: #001ac4;
    user-select: none;
    height: 50px;
    line-height: 50px;
    padding: 0 12px;
    margin: 8px;
    cursor: pointer;
    user-select: none;
}

a.active {
    border: none;
    color: #f40;
    cursor: auto;
}

a.disabled {
    color: #999;
    cursor: not-allowed;
}
js

首先是分析一下分页插件都是什么功能,各个功能又要怎么去完成,最后如何用代码写出来。

  1. 首先页面上要有当前页码,总页数,分页创建好后放在哪一个容器里面,分页插件的中间显示几个数字,所以要有这四个变量,所以我先创建一个函数createPager用来传入这四个参数,用来执行相关操作。所以我会在html中写入那两行js代码,那两行代码在js文件中写入都是一样,写在html纯属是因为老师教我这样写的,这样写比较好判断,嘿嘿。
  2. 写好函数后,开始写代码,动手写核心代码时,要思考一下从哪里开始写,怎么写。我是从创建容器开始,这个容器里面是页面上显示的html,所以我是开始完成这个需求:
    1). 首先是创建这个容器元素,然后加上class类。然后写一个函数,有三个参数,分别是样式类,中间的文本,点击后跳转到哪一页这三个参数,所以在之前创建的createPager函数里面在写一个createAnchor函数。
    2). 然后再这个createAnchor函数里面创建a元素,给a元素挂上对应的样式类,再设置中间的文本,然后把a元素添加进创建的容器里面。然后给a元素注册一个鼠标点击事件,在事件里面分析一下,跳转就是重新调用一个第一次写的createPager函数,但是有几种情况是不能跳转的: (1) 跳转的页数小于1和跳转的页数大于总页数和跳转的页数等于当前的页码,这三种情况不能跳转,所以做判断,直接返回,什么也不做。然后其他的情况是可以跳转的,所以执行调用第一次写的createPager函数,传入四个参数。
    3). 然后就是开始创建分页了,分析一下,一共有四个部分,分别是首页和上一页、中间显示的数字、下一页和尾页、当前的页码显示这四个部分,然后这个部分分别来写。首先是首页和上一页 ;如果当前是第一页,那么直接调用两次createAnchor函数,第一次传入(’disabled‘,‘首页’,‘1’),第二次传入(‘disabled’, ‘上一页’, page - 1),因为是要有首页和上一页,所以调用两次这个函数,传入两次这个函数。然后再else一下,重新调用一下这个函数两次,只不过传入的参数disabled去掉,因为可以点击,所以去掉,等于1时不可以点击,所以要传入这个样式。然后是中间显示的数字;因为数据多,所以我用循坏来生成,但是要计算最大值和最小值,所以我们要找到最小值和最大值,拿当前的页码减去中间显示的数字/2取整就是最小值,然后最小值要是小于1,就等于1,最大值就是最小值加上中间的数字减去1,如果最大值大于总页码,那么最大值就是总页码值。然后回到刚才的循环中,i初始值是最小值,最大值是最大值。如果i等于了当前页码,那么直接调用一下createAnchor函数,传入(“active”, i, i);,ekse中去掉active样式。然后再开始写下一页和尾页;下一页和尾页于首页和上一页写法一样,只是判断的条件变为当前页码等于总页码,然后做相应的操作。最后当前页码的显示;只需要创建一个span元素,给span元素加入相应的内容或者样式,最后添加进容器中即可,然后最后将生成好的分页全部添加进容器里面即可。还有一个最重要的步骤,那就是清空,再做后续的生成容器之前,我们要将上一次的内容先清空。
js代码:
function createPager(pager, pagerNumber, middlePager, container) {
    // 清空
    container.innerText = '';
    var divpager = document.createElement('div');
    pager.className = 'pager';
    /*
     * className:样式类
     * text:中间的显示文本
     * newPager: 点击后跳转到哪一页
     */
    function createAnchor(className, text, newPager) {
        var a = document.createElement('a');
        a.className = className;
        a.innerText = text;
        divpager.appendChild(a);
        a.onclick = function() {
            // 做相应的三种情况的判断
            if (newPager < 1 || newPager > pagerNumber || newPager === pager) {
                return;
            }
            createPager(newPager, pagerNumber, middlePager, container);
        }
    }
    // 首页和上一页
    if (pager === 1) {
        createAnchor('disabled', '首页', 1)
        createAnchor('disabled', '上一页', pager - 1)
    } else {
        createAnchor('', '首页', 1)
        createAnchor('', '上一页', pager - 1)
    }
    // 中间的数字
    var min = Math.floor(pager - middlePager / 2);
    if (min < 1) {
        min = 1;
    }
    var max = min + middlePager - 1;
    if (max > pagerNumber) {
        max = pagerNumber;
    }
    for (var i = min; i <= max; i++) {
        if (i === pager) {
            createAnchor('active', i, i);
        } else {
            createAnchor('', i, i);
        }
    }
    // 下一页和尾页
    if (pager === pagerNumber) {
        createAnchor('disabled', '下一页', pager + 1)
        createAnchor('disabled', '尾页', pagerNumber);
    } else {
        createAnchor('', '下一页', pager + 1)
        createAnchor('', '尾页', pagerNumber);
    }
    // 当前页
    var span = document.createElement('span');
    span.innerText = pager + "/" + pagerNumber;
    divpager.appendChild(span);
    // 添加进容器中
    container.appendChild(divpager);
}

若有错误,敬请指正。

  • 8
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端志茗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值