帶有省略號的分頁組件

帶有省略號的分頁組件

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();
    });
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章