jQuery自定义分页

Html:

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title>jQuery自定义分页</title>

    <link type="text/css" href="css/page.css" rel="stylesheet" />

    <script type="text/javascript" src="js/jquery.min.js"></script>

</head>

<body>

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


    <script type="text/javascript" src="js/page.js"></script>
    <script type="text/javascript">
        P.initMathod({
            params: {
                elemId: '#Page',
                total: '100',
                pageSize: '10'
            },
            requestFunction: function() {
                // P.config.total = parseInt(Math.random() * 10 + 85);//此处模拟总记录变化

                //TODO ajax异步请求过程,异步获取到的数据总条数赋值给 P.config.total

                //列表渲染自行处理

                console.log(JSON.stringify(P.config));
            }
        });
    </script>

</body>

</html>


Js:

/**
 * 自定义分页(封装实现)
 * @type {Page}
 */

P = new Page();
//分页对象
function Page(){
    this.config = {elemId:'#page',pageIndex:'1',total:'0',pageNum:'7',pageSize:'10'};//默认参数
    this.version = '1.0';//分页版本
    this.requestFunction = null;//分页版本

    //初始化参数
    this.initMathod = function(obj){
        $.extend(this.config,obj.params);//默认参数 + 用户自定义参数
        this.requestFunction = obj.requestFunction;
        this.renderPage();
    };

    //渲染分页
    this.renderPage = function(){
        this.requestFunction();
        this.pageHtml();

        //分页绑定事件
        $(P.config.elemId).on('click','a',function(){
            var flag = $(this).parent().hasClass('disabled');
            if(flag){
                return false;
            }

            var pageIndex = $(this).data('pageindex');
            P.config.pageIndex = pageIndex;
            P.requestFunction();
            P.pageHtml();
        });
    };

    //分页合成
    this.pageHtml = function(){
        var data = this.config;
        if(parseInt(data.total) <= 0){
            return false;
        }

        var elemId = data.elemId;
        var pageNum = isBlank(data.pageNum) ? 7 : parseInt(data.pageNum);//可显示页码个数
        var pageSize = isBlank(data.pageSize) ? 10 : parseInt(data.pageSize);//可显示页码个数
        var total = parseInt(data.total);//总记录数
        var pageTotal = total%pageSize != 0 ? parseInt(total/pageSize) + 1 : parseInt(total/pageSize);//总页数
        var pageIndex = pageTotal < parseInt(data.pageIndex) ? pageTotal : parseInt(data.pageIndex);//当前页
        var j = pageTotal < pageNum ? pageTotal : pageNum;//如果总页数小于可见页码,则显示页码为总页数
        var k = pageIndex < parseInt((j/2) + 1) ? -1 * (pageIndex - 1) : pageIndex > (pageTotal - parseInt(j/2)) ? -1 * (j - (pageTotal - pageIndex) - 1) : -1 * parseInt((j/2));//遍历初始值
        var pageHtml = '';

        if(pageIndex <= 0 || pageIndex == 1){
            pageHtml += '首页' +
                '上一页';
        }else{
            pageHtml += '首页' +
                '上一页';
        }

        for(var i = k;i < (k + j);i++){
            if(pageTotal == (pageIndex + i - 1))break;
            if(i == 0){
                pageHtml += ''+ pageIndex +'';
            }else{
                pageHtml += ''+ (pageIndex + i) +'';
            }
        }

        if(pageTotal == 1 ||  pageTotal <= pageIndex){
            pageHtml += '下一页' +
                '末页';
        }else{
            pageHtml += '下一页' +
                '末页';
        }
        pageHtml += ''
        $(elemId).html('');
        $(elemId).html(pageHtml);
    };
}

function isBlank(str){
    if(str == undefined || str == null || str.trim() == ''){
        return true;
    }
    return false;
}



Css:

#Page {
    margin: 0px auto 30px;
    width: 430px;
}

#Page ul {
    padding: 0;
    min-width: 450px;
}

#Page ul::after {
    content: '';
    display: block;
    clear: both;
}

#Page ul li {
    float: left;
    width: auto;
    min-width: 32px;
    height: 30px;
    line-height: 30px;
    list-style: none;
}

#Page a {
    color: #aaa;
    font-family: "微软雅黑";
    padding: 0 10px;
    text-decoration: none;
    display: block;
    text-align: center;
    border: 1px solid #ccc;
    border-left: none;
}

#Page ul li:first-child a {
    border-left: 1px solid #ccc;
}

#Page ul li a:hover {
    background-color: #9f1f1c;
}

#Page ul li a:hover {
    color: white;
}

#Page .disabled a:hover {
    background-color: white;
    cursor: not-allowed;
    color: #aaa;
}

#Page .active a {
    background-color: #9f1f1c;
    color: white;
}