1.分页组件

分页组件

结果图:
在这里插入图片描述

结构html代码

    <!-- 分页组件存放的最外层容器 -->
    <div class="pagerContainer"></div>

    <script src="../js/pager.js"></script>
    <script>
        // 获取分页放置的外部容器
        var pagerContainer = document.getElementsByClassName('pagerContainer')[0];

        // 调用创造分页组件的函数,在pager.js文件中,上面已经引入了
        // 当前页 总页数 中间的渲染页数 放入的容器
        createPager(2,50,10,pagerContainer);
    </script>

样式css代码

/* 生成的分页组件容器的样式;水平居中显示 */
.pager{
    text-align:center;
}

/* 分页组件里面存放的a的样式 */
.pager a{
    /* 要设置他的高,因为a是行级元素,不可以改宽高,然后又要确保在一行,由内容决定元素大小,所以改为行级块元素 */
    display:inline-block;
    height:34px;

    /* 设置字体垂直居中,行高等于高度 */
    line-height:34px;

    /* 垂直居中后字体的上下有间距,使用padding使字体离a两边有间距 */
    padding:0 12px;

    /* 设置边框和字体颜色 */
    border: 1px solid #e1e2e3;
    color: #001ac4;

    /* 让a两边隔开一段距离,使用外边距 */
    margin:8px;

    /* 设置鼠标移入样式为小手 */
    cursor: pointer;

    /* 设置用户不可选择 */
    user-select: none;
}

/* 设置a的激活样式;即当前页挂上该样式 */
.pager a.active{
    /* 去掉外边框 */
    border: none;

    /* 改变字体颜色 */
    color: #f40;

    /* 去掉鼠标样式,改为默认 */
    cursor: none;

}


/* 设置a的不能点击的样式;即禁用时挂上该样式 */
.pager a.disabled{
    /* 改变字体颜色 */
    color : #ccc;

    /* 设置鼠标样式为禁用状态 */
    cursor: not-allowed;
}

js代码

/**
 * 生成分页组件的函数
 * @param {当前页} page 
 * @param {最大页数} pageNumber 
 * @param {当前中间渲染的页数} mostNumber 
 * @param {生成后放置的容器} container 
 */
function createPager(page,pageNumber,mostNumber,container){
    // 每次渲染前都把容器原有内容清空
    container.innerHTML = '';
    // 1.生成用于放置各个分页按钮,即a的容器,挂上pager类;
    var pager = document.createElement('div');
    pager.className = 'pager';

    // 辅助函数(创建a的函数)并给其加上点击事件
    function createA(className,text,jump){
        var a = document.createElement('a');
        a.className = className;
        a.innerText = text;
        // 将生成a加入到提前生成的pager容器里
        pager.appendChild(a);

        // 为a添加点击事件
        a.onclick = function(){
            // 有几种情况下是不跳转的:(1)当点击的正是当前页;(2)当要跳转的jump<1或者>pageNumber时
            if(jump < 1 || jump > pageNumber || page === jump ||){
                return;
            }
            // 重新调用createPager函数,重新渲染分页组件,只需要把page当前页换成jump跳转页即可,其他参数不变
            createPager(jump,pageNumber,mostNumber,container);
        }
    }





    // 2.生成分页 包含四部分;鉴于下面均是来生成a标签的,所以封装了创建a标签的函数
    //  (1)首页和上一页 
    // 要判断,若page=1:则要给他们挂上禁用的样式;若不等于:则默认样式
    if(page === 1){
        // 参数:要挂的类名,文字,点击后跳转的页数:重新调用createPager渲染分页组件;
        // 有了跳转的页数,相当于以跳转页数为当前页,其他createPager参数不变,重新渲染分页组件
        // 因为这里是禁用,所以最后一个参数添多少都可以
        createA('disabled','首页',1);
        createA('disabled','上一页',1);
    }else{
        // 首页应该是跳转到第一页
        createA('','首页',1);
        // 上一页应该是跳转到当前页-1页
        createA('','上一页',page - 1);
    }

    // (2)中间渲染的页
    // 中间页要确定最小页和最大页
    // 最大程度确保当前页在中间显示
    // 最小页应该是:当前页-渲染中间页数/2;结果是整数;即Math.floor(page - mostNumber/2)
    // 最大页就是:上一步计算出来的最小页+渲染中间页数-1;即min + mostNumber - 1;
    // 但前面要加判断,若计算出来的min<1;那就应该让他等于1;
    // 若计算出来的max大于pageNumber;即总页数;那就让他等于pageNumber
    var min = Math.floor(page - mostNumber/2);
    if(min < 1){
        min = 1;
    }
    var max = min + mostNumber - 1;
    if(max > pageNumber){
        max = pageNumber;
    }
    // 使用循环,生成从min到max的a;
    for(var i = min;i <= max;i ++){
        // 还要加判断,若i = page;即若为当前页,则要加上激活样式
        // 最后的参数点击该a,跳转的页数也是i
        if(page === i){
            createA('active',i,i);
        }else{
            createA('',i,i);
        }
    }
    // (3)下一页和尾页
    // 同首页和下一页
    if(page === pageNumber){
        createA('disabled','下一页',1);
        createA('disabled','尾页',1);
    }else{
        // 下一页应该是跳转到当前页+1页
        createA('','下一页',page + 1);
        // 尾页应该是跳转到pageNumber页
        createA('','尾页',pageNumber);
    }
    // (4)最后的span:当前页/总页数
    var span = document.createElement('span');
    span.innerText = page + '/' + pageNumber;
    pager.appendChild(span);


    container.appendChild(pager);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值