• 封装javascript分页插件——可以使用的测试版(β版)


    上一篇测试版的代码我们发现了很多问题,在这一版本中我们将解决。上一版的连接地址:封装javascript分页插件——测试版

    最主要的就是修改核心方法:

    function initTag() {
        pageModel.$element.html("")
        var pageTagDynamic = "";
        if (pageModel.pageCountTag >= pageModel.pageCount) {
            pageModel.pageCountTag = pageModel.pageCount
        }
        var start = 3;
        var end = pageModel.pageCountTag - 2;
    
        if (pageModel.pageIndex != 1) {
            start = pageModel.pageIndex - 2 >= 4 ? pageModel.pageIndex - 2 : 3
            end = pageModel.pageIndex + 3 <= pageModel.pageCount - 2 ? pageModel.pageIndex + 3 : pageModel.pageCount - 2
            if (end < pageModel.pageCountTag - 2) {
                end = pageModel.pageCountTag - 2;
            }
            if (start > pageModel.pageCount - 7) {
                start = pageModel.pageCount - 7;
            }
        }
        for (var i = start; i <= end; i++) {
            pageTagDynamic += stringFormat(pageModel.pageTagTemplate, "page", i, i, i);
        }
        pageModel.$element.append(pageTagDynamic);
        //增加两侧非点击的间隔符
        AddFirstOrLast(start != 3, end != pageModel.pageCount - 2)
        //增加上一页和下一页的标签
        AddPreviousOrNext();
        //设置当前页标签样式
        signCurrentPage();
    }
    分页的核心方法

    在核心方法之中我更换了思考方式:循环的主体不在是所有的分页标签,因为当定位在中间页的时候,有可能会出现两个不可点击的分隔标签。在加上首页和末叶的标签。我们一共要在循环主体内排除4个标签,分别是第一页,第二页,最后一页,最后第二页

    所以循环的起始和结束索引就是start和end

    if (pageModel.pageCountTag >= pageModel.pageCount) {

      //保证总页数较少的时候循环总体就是总页数
      pageModel.pageCountTag = pageModel.pageCount
    }
    var start = 3;
    var end = pageModel.pageCountTag - 2;

    //当前页定位不是首页的时候

    if (pageModel.pageIndex != 1) {

      //确定循环的起始和结束索引
      start = pageModel.pageIndex - 2 >= 4 ? pageModel.pageIndex - 2 : 3
      end = pageModel.pageIndex + 3 <= pageModel.pageCount - 2 ? pageModel.pageIndex + 3 : pageModel.pageCount - 2

      //当前页过小时对结束索引的补齐
      if (end < pageModel.pageCountTag - 2) {
      end = pageModel.pageCountTag - 2;
      }

      //当前页过大时对开始索引的补齐
      if (start > pageModel.pageCount - 7) {
      start = pageModel.pageCount - 7;
      }
    }

    //循环的核心代码

    for (var i = start; i <= end; i++) {
      pageTagDynamic += stringFormat(pageModel.pageTagTemplate, "page", i, i, i);
    }

    function AddFirstOrLast(existLeftDot, existRightDot) {
        //在此方法运行是,当前页面已经存在生成好的标签元素
        var previous = pageModel.$element.children().first();
        var next = pageModel.$element.children().last();
        //增加第一页标签
        $(stringFormat(pageModel.pageTagTemplate, "page", 1, 1, 1)).insertBefore(previous);
        //增加最后一页标签
        $(stringFormat(pageModel.pageTagTemplate, "page", pageModel.pageCount, pageModel.pageCount, pageModel.pageCount)).insertAfter(next);
        if (existLeftDot) {
            $(pageModel.pageDotTag).insertBefore(previous)
        }
        else {
            $(stringFormat(pageModel.pageTagTemplate, "page", 2, 2, 2)).insertBefore(previous);
        }
        if (existRightDot) {
            $(pageModel.pageDotTag).insertAfter(next)
        }
        else {
            $(stringFormat(pageModel.pageTagTemplate, "page", pageModel.pageCount - 1, pageModel.pageCount - 1, pageModel.pageCount - 1)).insertAfter(next);
        }
    }
    增加两侧非点击的间隔符

    AddFirstOrLast(start != 3, end != pageModel.pageCount - 2)

    参数是两个bool类型,我们之前提到过循环的主体内排除4个标签,分别是第一页,第二页,最后一页,最后第二页。

    所以在这里我们要把排除的标签加回来,那么,判定如果存在第三页,那么就增加第二页,不存在,就增加不可点击的分隔标签,末页也是同理

    这样分页导航基本上就已经完成了

    function AddPreviousOrNext() {
        var previous = pageModel.$element.children().first();
        var next = pageModel.$element.children().last();
        if (pageModel.pageIndex != 1) {
            $(pageModel.pageLastTag).insertBefore(previous);
        }
        if (pageModel.pageIndex != pageModel.pageCountTag) {
            $(pageModel.pageNextTag).insertAfter(next);
        }
    }
    上一页和下一页
    function signCurrentPage() {
        $("#page-" + pageModel.pageIndex).addClass("pageSelected");
    }
    添加当前页样式
        <style>
            label {
                margin: 10px;
            }
    
            .pageSelected a,
            .page a {
                text-decoration: none;
            }
    
            .page a {
                color: black;
            }
    
            .pageSelected a {
                color: blueviolet;
            }
        </style>
    样式表
  • 相关阅读:
    02、书店寻宝(一)
    01、博客爬虫
    00、下载文件
    068、Calico的网络结构是什么?(2019-04-11 周四)
    067、如何部署Calico网络 (2019-04-10 周三)
    066、Weave如何与外网通信?(2019-04-09 周二)
    065、容器在Weave中如何通信和隔离?(2019-04-08 周一)
    064、Weave网络结构分析(2019-04-04 周四)
    063、如何使用weave网络(2019-04-03 周三)
    CMD运行指令
  • 原文地址:https://www.cnblogs.com/zk3113/p/5823137.html
Copyright © 2020-2023  润新知