jquery 分頁控件(一)

      之前一直都是用別人的分頁控件,雖然用得很爽,但總覺的仍是本身寫個小插件比較好,這個插件效果、代碼等都有參照別人完成的控件。即使功能並非那麼完善,擴展性也很差,bug或許還不少。我的以爲,適合本身用就好了。你對本身寫的確定會比較熟悉,當插件須要不停的重構,這個插件就慢慢完善了。如今要作的是走出開頭的那一步。每每都是由於開頭的那一步阻礙了咱們。html

廢話一大堆........算法

慣例 Demo下載 app

效果圖:asp.net

 

1、定義基礎數據ide

    //基礎數據
    var current_page = 1;  //當前頁
    var num_edge = 4;    //省略號先後顯示數量
    var counts = 40;     //總頁數
    var display_num = 10;  //每次顯示數字數量

 

2、分頁控件原理spa

第一種狀況,出現前面:.net

//第一種狀況爲 出現前面的數字,假如當前頁爲current_page=12,display_num=10,num_edge=4 
//display_num + Math.ceil(num_edge / 2) = 12 當current_page超過了12 就會出現第三種狀況
//num1 = 16 = Math.max(16,10) 意思是能夠顯示超過10個數字
//num2 = 14 = Math.min(16,14) 意思是最多隻能顯示14個數字 if (current_page <= (display_num + Math.ceil(num_edge / 2))) {//Math.ceil(num_edge / 2)表示向上取整 var num1 = Math.max((current_page + num_edge), display_num); var num2 = Math.min(num1, (display_num + num_edge)); for (var i = 1; i <= num2; i++) { addItem(i);//生成數字的方法 } addItem(-1, {text: "...", classes: "ellipse"});//省略號
//顯示後面的那一段數字
for (var i = counts - num_edge + 1; i <= counts; i++) { addItem(i); }
}

     

第二種狀況,出現後面:插件

// 第二種狀況,出現後面的數字,假如當前頁爲current_page=31,display_num=10,num_edge=4 
//當current_page 小於31 就會出現第三種狀況
else if (current_page > (counts - display_num)) {
//生成前面的那一段
for (var i = 1; i <= num_edge; i++) { addItem(i); } addItem(-1, {text: "...", classes: "ellipse"});//省略號
//num1 = 27 = Math.min(27,31)
var num1 = Math.min((current_page - num_edge), (counts - display_num + 1)); var num2 = counts; for (var i = num1; i <= num2; i++) { addItem(i); }
}

     

第三種狀況,出現中間:code

//第三種狀況,出現中間數字
 else {
      for (var i = 1; i <= num_edge; i++) {
           addItem(i);
      }
      addItem(-1, {text: "...", classes: "ellipse"});
//在這種狀況,current_page 老是大於12小於31
//num2 - num1 老是等於10
var num1 = current_page - Math.ceil(display_num / 2); var num2 = num1 + display_num - 1; for (var i = num1; i <= num2; i++) { addItem(i); } addItem(-1, {text: "...", classes: "ellipse"}); for (var i = counts - num_edge; i <= counts; i++) { addItem(i); } }

 

3、生成數字htm

//生成數字
var addItem = function (page_id, opts) {
//$.extend()這句意思是傳過來的opts將覆蓋{text: page_id, classes: ""},若是opts爲空 則與{}匹配
//例如:addItem(current_page - 1, {text: "<<", classes: "btn_text"}); opts
= $.extend({text: page_id, classes: ""}, opts || {});
//省略號、第一頁(page_id < 1)和 最後一頁(page_id > options.counts_num)所生成的標籤 if (page_id < 1 || page_id > counts) { var view = $("<span class='" + opts.classes + "'>" + opts.text + "</span>"); } //當前頁(page_id == options.current_page)的樣式和標籤 else if (page_id == current_page) { var view = $("<span class='current_background'>" + opts.text + "</span>"); } //其餘狀況 else { var view = $("<span class='" + opts.classes + "'>" + opts.text + "</span>").bind("click", getClick(page_id)); } $('.pagination').append(view);//標籤放入.pagination }; //點擊某個數字調用的方法 var getClick = function (page_id) { return function () { return pageSelected(page_id); } };
var pageSelected = function (index) {
        current_page = index;
        $(".views div").eq(current_page - 1).show().siblings().hide();
        viewNum();
    };

      大部分的代碼都已經展示出來,其餘部分能夠看源文件。固然不單只是這種邏輯,還有其餘更好的邏輯只是我想不到而已,我能想到的就是這種比較直觀、笨的邏輯,就只能把效果顯示出來而已。若是您有更好算法請告訴我,很是感謝!若是你看有哪些地方不正確、很差的請告訴我,一樣感謝!

      下一章將會重構成插件,只要傳入參數就能夠隨便調用了。而後經過asp.net項目把插件應用到實際項目中。

 

若是你以爲還不錯,給個推薦吧!

轉載請註明出處,謝謝!

相關文章
相關標籤/搜索