带有省略号的分页组件

带有省略号的分页组件

html中只要引入bootstrap、jquery以及我的js(元素的id及数据结构请根据实际情况自行修改)


<!DOCTYPE html>
<html>
<head>
  <title></title>
  <link rel="stylesheet" type="text/css" href="http://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css">
</head>
<body>
  <div id="pub">
    <nav class="pull-right my-nav">
      <ul class="pagination"></ul>
    </nav>
  </div>
</body>
<script src="http://cdn.bootcss.com/jquery/3.1.1/jquery.min.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript" src="nav.js"></script>
<script type="text/javascript">
  var nav = new Nav(1, 10, 1, '1.json');
  nav.myAjax();
  nav.getSinglePageData();
</script>
</html>


/*
 *   推荐使用bootstrap中的分页组件,然后使用本段代码
 *      
 * */
function Nav(pageNo, pageSize, startIndex, url) {
    this.pageNo = pageNo || 1;			// 第几页
    this.pageSize = pageSize || 10;		// 每页几个数据
    this.startIndex = startIndex || 1;	// 开始的页数 只有1,11,21等等
    this.url = url;						// 接口地址
    this.ajaxFlag = true;				// 是否更新分页导航
    this.direction = "right";			// 触发的是左侧的省略号还是右侧的省略号
    this.allCount = 0;					// 总数据条数
    this.pubData = [];					// ajax获取的数据,根据具体数据需要调整
}

Nav.prototype.myAjax = function () {
    var _this = this;
    $.ajax({
        url: _this.url,
        type: "GET",
        data: {
            pageNo: _this.pageNo,
            pageSize: _this.pageSize
        },
        async: true,
        success: function (data) {
            _this.pubData = data.data;
            _this.allCount = _this.pubData.totalCount;
            if (_this.ajaxFlag) {
                _this.createNav();
            }

        },
        error: function (data) {
            console.log(data.code);
        }
    });
}

Nav.prototype.createNav = function () {
    this.ajaxFlag = false;
    var myNav = $("#pub .my-nav");			// 这里的$("#pub .my-nav")请根据情况自行修改
    var activeClass = "active";
	
	// 是否给数字1active
    if (this.startIndex === 1 && this.direction === "right") {
        activeClass = "active";
    }else {
        activeClass = "";
    }
	
	// 创建 《,1
    myNav.find("ul").empty();
    myNav.find("ul").append($("<li><a href='javascript:void(0)'>«</a></li>"));
    myNav.find("ul").append($("<li class='"+ activeClass +"'><a href='javascript:void(0)'>1</a></li>"));
	
	// 是否创建左侧省略号
    if (this.startIndex !== 1) {
        myNav.find("ul").append($("<li><a href='javascript:void(0)'>...</a></li>"));
    }
	
	// 循环创建中间部分
    for (var i = this.startIndex; i <= this.startIndex + 9; i++) {
		
		// 跳过第一个和最后一个
        if (i === 1 || i >=  Math.ceil( this.allCount / 10)) {
            continue;
        }

        var oLi = $("<li><a href='javascript:void(0)'>" + i + "</a></li>");
		
		// 向左时最右边的nav添加active,向右时最左边的添加active
        if ((this.direction === "left" && i % 10 === 0) || (this.direction === "right" && i % 10 === 1)) {
            oLi.addClass("active");
        }

        myNav.find("ul").append(oLi);
    }

	//判断是否添加右侧省略号
    if (this.startIndex + 10 < Math.ceil(this.allCount / 10)) {
        myNav.find("ul").append($("<li><a href='javascript:void(0)'>...</a></li>"));
    }
    
    // 当页面只有一页的时候跳过
    if (Math.ceil(this.allCount / 10) !== 1) {
        myNav.find("ul").append($("<li><a href='javascript:void(0)'>" + Math.ceil(this.allCount / 10) + "</a></li>"));
    }
    myNav.find("ul").append($("<li><a href='javascript:void(0)'>»</a></li>"));
}

Nav.prototype.getSinglePageData = function () {
    var _this = this;
    
    /*
     * 外层的元素id自行修改
     * 点击事件以 activeLiIndex 为核心
     */
    $(document).on("click", "#pub .my-nav li", function () {
        var activeLiIndex = $("#pub .my-nav li.active").index();
		
		// 《 与  》两个按钮不会有 active
        if ($(this).index() > 0 && $(this).index() < $("#pub .my-nav li").length - 1) {
            activeLiIndex = $(this).index();
        }
        
        // 到最左边和最右边active不变
        if ($(this).index() === 0) {
            if (activeLiIndex == 1) {
                return;
            }
            activeLiIndex--;
        }
        if ($(this).index() === $("#pub .my-nav li").length - 1) {
            if (activeLiIndex == $("#pub .my-nav li").length - 2) {
                return;
            }
            activeLiIndex++;
        }
		
		// 《 与 》两个按钮的 disabled属性修改
        if (activeLiIndex === 1) {
            $("#pub .my-nav li").eq(0).addClass("disabled");
        }else {
            $("#pub .my-nav li").eq(0).removeClass("disabled");
        }
        if (activeLiIndex === $("#pub .my-nav li").length - 2) {
            $("#pub .my-nav li").eq($("#pub .my-nav li").length - 1).addClass("disabled");
        }else {
            $("#pub .my-nav li").eq($("#pub .my-nav li").length - 1).removeClass("disabled");
        }

        $("#pub .my-nav li").removeClass("active");
        $("#pub .my-nav li").eq(activeLiIndex).addClass("active");
        
        // 如果active的按钮是省略号,根据index()判断左右,然后调用ajax
        if ($("#pub .my-nav li.active a").html() === "...") {
            _this.ajaxFlag = true;

            if ($("#pub .my-nav li.active").index() === 2) {
                _this.direction = "left";
                var  leftHtml = $("#pub .my-nav li").eq(activeLiIndex + 1).find("a").html();
                _this.pageNo = leftHtml - 1;
                _this.startIndex = leftHtml - 10;
                _this.myAjax();
            }else{
                _this.direction = "right";
                var rightHtml = $("#pub .my-nav li").eq(activeLiIndex - 1).find("a").html();
                _this.pageNo = rightHtml / 1 + 1;
                _this.startIndex = rightHtml / 1 + 1;
                _this.myAjax();
            }

            return;
        }
		
	// 如果active的不是省略号,调用ajax,不修改nav导航
        _this.pageNo = $("#pub .my-nav li.active a").html() - 0;
        _this.myAjax();
    });
}


``` # 定义当前页和总页数 $current_page = 1; $total_pages = 10; # 定义分页器最多显示的页码数 $max_pages = 5; # 计算分页器起始页码和结束页码 $start_page = $current_page - floor($max_pages / 2); if ($start_page < 1) { $start_page = 1; } $end_page = $start_page + $max_pages - 1; if ($end_page > $total_pages) { $end_page = $total_pages; $start_page = $end_page - $max_pages + 1; if ($start_page < 1) { $start_page = 1; } } # 输出分页器 echo '<ul class="pagination">'; if ($current_page > 1) { echo '<li><a href="?page=' . ($current_page - 1) . '">上一页</a></li>'; } if ($start_page > 1) { echo '<li><a href="?page=1">1</a></li>'; if ($start_page > 2) { echo '<li>...</li>'; } } for ($i = $start_page; $i <= $end_page; $i++) { if ($i == $current_page) { echo '<li class="active"><a href="#">' . $i . '</a></li>'; } else { echo '<li><a href="?page=' . $i . '">' . $i . '</a></li>'; } } if ($end_page < $total_pages) { if ($end_page < $total_pages - 1) { echo '<li>...</li>'; } echo '<li><a href="?page=' . $total_pages . '">' . $total_pages . '</a></li>'; } if ($current_page < $total_pages) { echo '<li><a href="?page=' . ($current_page + 1) . '">下一页</a></li>'; } echo '</ul>'; ``` 上面的代码是php代码,如果需要转换为jq代码,可以按照以下步骤进行: 1. 将php变量改为jq变量,例如将"$current_page"改为"current_page"; 2. 将php的"echo"改为jq的"$().append()"; 3. 将php的"."改为jq的"+"; 4. 将php的";"改为jq的";"或者省略掉。 转换后的代码如下所示: ``` # 定义当前页和总页数 var current_page = 1; var total_pages = 10; # 定义分页器最多显示的页码数 var max_pages = 5; # 计算分页器起始页码和结束页码 var start_page = current_page - Math.floor(max_pages / 2); if (start_page < 1) { start_page = 1; } var end_page = start_page + max_pages - 1; if (end_page > total_pages) { end_page = total_pages; start_page = end_page - max_pages + 1; if (start_page < 1) { start_page = 1; } } # 输出分页器 $('ul.pagination').empty(); if (current_page > 1) { $('ul.pagination').append('<li><a href="?page=' + (current_page - 1) + '">上一页</a></li>'); } if (start_page > 1) { $('ul.pagination').append('<li><a href="?page=1">1</a></li>'); if (start_page > 2) { $('ul.pagination').append('<li>...</li>'); } } for (var i = start_page; i <= end_page; i++) { if (i == current_page) { $('ul.pagination').append('<li class="active"><a href="#">' + i + '</a></li>'); } else { $('ul.pagination').append('<li><a href="?page=' + i + '">' + i + '</a></li>'); } } if (end_page < total_pages) { if (end_page < total_pages - 1) { $('ul.pagination').append('<li>...</li>'); } $('ul.pagination').append('<li><a href="?page=' + total_pages + '">' + total_pages + '</a></li>'); } if (current_page < total_pages) { $('ul.pagination').append('<li><a href="?page=' + (current_page + 1) + '">下一页</a></li>'); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值