Bootstrap分頁組件
之前我曾寫過一篇關于bootstrap分頁的文章,簡單地展示了使用ajax加載網頁內容時,這個bootstrap組件的改進方法,現在我對這個方法進行了封裝,讓它成為一個比較通用的方法。
先看代碼:
function createPagNav($container, totalPageNum, currentNum, BeforeFun, AfterFun,NoPageFun) {
var $thisPageNumber, thisShowMinNumber = 1, $prePage, $nextPage, $firstPage, $lastPage, $inputPage, $inputPageBtn;
if (!$container || $container.length != 1)
return false;
$container.html('<nav><ul class="pagination pag-result"></ul></nav>');
var $pagResult = $container.find("ul.pag-result");
var initStr = [];
currentNum = currentNum || 0;
totalPageNum = totalPageNum || 0;
currentNum = parseInt(currentNum);
totalPageNum = parseInt(totalPageNum);
if (currentNum) {
if (currentNum < 1) currentNum = 1;
else if (currentNum > totalPageNum) currentNum = totalPageNum;
}
else currentNum = 1;
if (totalPageNum && totalPageNum >= 1) {
initStr
.push('<li class="disabled first-page" value="1"><span>首頁</span></li>');
initStr
.push('<li class="disabled pre-page" value="' + (currentNum - 1) + '"><span>上一頁</span></li>');
if (totalPageNum == 1) {
initStr
.push('<li class="disabled next-page" value="' + (currentNum + 1) + '"><span>下一頁</span></li>');
initStr.push('<li class="disabled last-page" value="'
+ totalPageNum + '"><span>末頁</span></li>');
} else {
initStr
.push('<li class="next-page" value="' + (currentNum + 1) + '"><span>下一頁</span></li>');
initStr.push('<li class="last-page" value="' + totalPageNum
+ '"><span>末頁</span></li>');
}
initStr
.push('<div class="input-page-div">當前第<input type="text" maxlength="6" value="' + currentNum + '" />頁,共<span>'
+ totalPageNum
+ '</span>頁<button type="button" class="btn btn-xs input-btn-xs">確定</button></div>');
$pagResult.append(initStr.join(""));
// 初始化變量
$prePage = $container.find("li.pre-page");
$nextPage = $container.find("li.next-page");
$firstPage = $container.find("li.first-page");
$lastPage = $container.find("li.last-page");
$inputPage = $container.find("div.input-page-div input");
$inputPageBtn = $container.find("div.input-page-div button");
// 生成頁碼
CreatPageLi(ComputeStartPage(currentNum, totalPageNum), currentNum, totalPageNum);
// 綁定點擊事件
$pagResult.bind("click", function (e) {
var target = e.target;
var $targetP = $(target).parent();
if (!$targetP.is("li") || !$targetP.attr("value"))
return false;
if (!$targetP.hasClass("disabled")
&& !$targetP.hasClass("active")) {
GotoPage($targetP.attr("value"));
}
});
$inputPageBtn.bind("click", function () {
var numberPage = parseInt($inputPage.val());
if (isNaN(numberPage))
return false;
GotoPage(numberPage);
});
} else {
$container.html("");
if(NoPageFun) NoPageFun();
}
function GotoPage(numberPage) {
numberPage = parseInt(numberPage);// 要跳轉的頁碼
var maxNumber = parseInt($lastPage.attr("value"));// 最大頁碼
var oldNumber = parseInt($nextPage.attr("value")) - 1;// 當前頁碼
// 確保頁碼正確跳轉
if (numberPage <= 0)
numberPage = 1;
else if (numberPage > maxNumber)
numberPage = maxNumber;
// 頁碼相同時不用操作
if (numberPage == oldNumber)
return false;
// 跳轉前回調函數
if (BeforeFun && BeforeFun(numberPage) == false)
return false;
$inputPage.val(numberPage);
// 功能按鈕的開啟與關閉
if (numberPage == 1) {
$prePage.addClass("disabled");
$firstPage.addClass("disabled");
} else {
$prePage.removeClass("disabled");
$firstPage.removeClass("disabled");
}
if (numberPage == maxNumber) {
$nextPage.addClass("disabled");
$nextPage.next().addClass("disabled");
} else {
$nextPage.removeClass("disabled");
$nextPage.next().removeClass("disabled");
}
// 開始跳轉
// 修改上一頁和下一頁的值
$prePage.attr("value", numberPage - 1);
$nextPage.attr("value", numberPage + 1);
// 計算起始頁碼
var starPage = ComputeStartPage(numberPage, maxNumber);
if (starPage == thisShowMinNumber) {// 要顯示的頁碼是相同的
$thisPageNumber.removeClass("active");
$thisPageNumber = $container.find("li.commonNum").eq(
numberPage - thisShowMinNumber);
$thisPageNumber.addClass("active");
} else {// 需要刷新頁碼
CreatPageLi(starPage, numberPage, maxNumber);
}
// 跳轉后回調函數
if (AfterFun) AfterFun(numberPage);
}
function ComputeStartPage(numberPage, maxPage) {
var startPage;
if (maxPage <= 10)
startPage = 1;
else {
if ((numberPage - thisShowMinNumber) >= 7) {// 跳轉到十頁中的后三頁或之后的頁碼時盡量顯示后續頁碼
startPage = numberPage - 3;
if (startPage + 9 > maxPage)
startPage = maxPage - 9;// 邊界修正
} else if ((numberPage - thisShowMinNumber) <= 2) {// 跳轉到十頁中的前三頁或之前的頁碼時盡量顯示更前頁碼
startPage = numberPage - 6;
if (startPage <= 0)
startPage = 1;// 邊界修正
} else {// 不用改變頁碼
startPage = thisShowMinNumber;
}
}
return startPage;
}
function CreatPageLi(page, activePage, maxPage) {// page:start page
page = parseInt(page);
activePage = parseInt(activePage);
maxPage = parseInt(maxPage);
var initStr = [], str;
thisShowMinNumber = page;// 初始化變量
for (var i = 1; i <= maxPage && i <= 10; i++ , page++) {
if (page == activePage) {
initStr.push('<li class="commonNum active" value="' + page
+ '"><a href="javascript:">' + page + '</a></li>');
} else
initStr.push('<li class="commonNum" value="' + page
+ '"><a href="javascript:">' + page + '</a></li>');
}
str = initStr.join("");
$prePage.siblings(".commonNum").remove();// 去除原有頁碼
$prePage.after(str);
$thisPageNumber = $container.find("li.commonNum.active");// 初始化變量
}
} 參數說明:
$container:分頁組件的容器,請確保這個容器只用來存放分頁組件
totalPageNum,:頁碼總數
currentNum:當前頁碼,默認為1
BeforeFun,:在頁碼跳轉之前調用的函數,可通過返回false來阻止頁碼跳轉(可在此處使用ajax來加載內容)
AfterFun:再頁碼跳轉之后調用的函數(也可在此處使用ajax來加載內容)
NoPageFun:當總頁碼為0時調用的函數
溫馨提示:這段代碼仍然有很多可以優化的地方
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!