JS实现带省略号的长分页显示

<!DOCTYPE html>
<html>
<meta charset="UTF-8" />
<head>
<title>带有省略号的分页</title>
<script src="http://libs.baidu.com/jquery/1.10.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css">
</head>
<body>
    <hr />
    <ul id="pageInfo" class="pagination">
        <li><a href="#">&laquo;</a></li>
        <li><a href="#">1</a></li>
        <li><a href="#">2</a></li>
        <li><a href="#">3</a></li>
        <li><a href="#">4</a></li>
        <li><a href="#">5</a></li>
        <li><a href="#">&raquo;</a></li>
    </ul>
</body>
<script type="text/javascript">
$(function() {
    var pagingInfo = $("#pageInfo")
    
    var data={
        pageCount : 100,
    }
    
    //表示前后都有省略号时中间页面刷新基准,为了防止点击中间时页面频繁刷新页面导致的视觉错位
    var tmpPageIndex = 0;
    
    //添加事件
    $(document).on("click", "#pageInfo li a",function () {
        let page = $(this).attr("page")
        if(page){
            page =parseInt(page)
            refreshPageInfo(data, page);
        }
        
    })
    
    // 刷新|生成分页信息|自定义属性page表示当前页面索引
    function refreshPageInfo(data, pageIndex) {
        var pageSize = data.pageCount
        pagingInfo.html('')
        var li = $('<li><a page="1">&laquo;</a></li>')
        pagingInfo.append(li)

        // 总页数小于等于10页,全部显示
        if (pageSize <= 10) {
            for (var i = 1; i <= pageSize; i++) {
                var li = $('<li><a page="' + i + '">' + i + '</a></li>')
                addActive(li, i, pageIndex)
                pagingInfo.append(li)
            }
            // 当前页是前10页
        } else if (pageIndex < 10) {
            for (var i = 1; i <= 10; i++) {
                var li = $('<li><a page="' + i + '">' + i + '</a></li>')
                addActive(li, i, pageIndex)
                pagingInfo.append(li)
            }
            pagingInfo.append('<li><a>......</a></li>')
            pagingInfo.append('<li><a page=' + pageSize + '>' + pageSize + '</a></li>')
            // 当前页面是最后10页
        } else if (pageSize - pageIndex < 10) {
            if (pageSize - 10 > 1) {
                pagingInfo.append('<li><a page="1">1</a></li>')
                pagingInfo.append('<li><a>......</a></li>')
            }
            for (var i = pageSize - 10; i <= pageSize; i++) {
                var li = $('<li><a page="' + i + '">' + i + '</a></li>')
                addActive(li, i, pageIndex)
                pagingInfo.append(li)
                if (i == 1) {
                    pagingInfo.append('<li><a>......</a></li>')
                }
            }
        } else {
            // 当前页面基于所有页面中间位置
            // 初始化页面基准坐标
            if (tmpPageIndex == 0) {
                tmpPageIndex = pageIndex
            }
            // 当页面索引达到最前或最后时,需要重新设置页面基准坐标
            if (tmpPageIndex <= pageIndex - 5 || tmpPageIndex >= pageIndex + 5) {
                tmpPageIndex = pageIndex
            }
            pagingInfo.append('<li><a page="1">1</a></li>')
            pagingInfo.append('<li><a>......</a></li>')
            for (var i = tmpPageIndex - 5; i <= tmpPageIndex + 5; i++) {
                var li = $('<li><a page="' + i + '">' + i + '</a></li>')
                addActive(li, i, pageIndex)
                pagingInfo.append(li)
            }
            pagingInfo.append('<li><a>......</a></li>')
            pagingInfo.append('<li><a page=' + pageSize + '>' + pageSize + '</a></li>')
        }

        var li = $('<li><a page="' + data.pageCount + '">&raquo;</a></li>')
        pagingInfo.append(li)
    }

    // 添加分页按钮焦点
    function addActive(li, i, pageIndex) {
        if (i == pageIndex) {
            li.addClass('active')
        }
    }
    
    refreshPageInfo(data,1)
    
})
</script>

</html>

 

原文地址:https://www.cnblogs.com/zincredible/p/10390162.html