分頁組件的簡單實現(xiàn)(初稿)

分頁功能是后臺管理系統(tǒng)中很常見的一個功能,今天我們就來看下如何實現(xiàn)一個簡單的分頁組件。

初步實現(xiàn)

首先從最簡單的情況考慮,假設(shè)一共有20頁,頁面中能出現(xiàn)的翻頁按鈕最多5個,當(dāng)前頁數(shù)是第10頁。那么這5個頁數(shù)按鈕上的數(shù)字分別是10,11,12,13,14。如果點擊頁數(shù)11,那么這5個分頁按鈕的數(shù)字變?yōu)?1,12,13,14,15。
從上面這種最簡單的情況來看,這個分頁組件應(yīng)該有以下這幾個變量:

  • begin:起始頁數(shù),這里是10.
  • currentPage:當(dāng)前頁,我們這里,當(dāng)前頁等于begin。
  • endpage:html頁面中最后一個分頁按鈕的數(shù)字。
  • showPages:html頁面中最多能出現(xiàn)幾個分頁按鈕。
  • totalPages:頁數(shù)總數(shù),這里是20

這四個變量的關(guān)系很簡單:

    var begin=10;
    var currentPage=begin;
    var showPages=5;
    var end=begin+showPages;
    for(var i=begin;i<end;i++){
        console.log(i);//10,11,12,13,14
    }

現(xiàn)在我們把這段代碼封裝成一個函數(shù),將currentPage和showPages作為變量抽象出來。

    function slicePage(currentPage,showPages) {
        var begin=currentPage;
        var end=begin+showPages;
        for(var i=begin;i<end;i++){
            console.log(i);
        }
    }
    slicePage(5,5);

特殊情況時

假設(shè)頁面上的數(shù)據(jù)只有3頁,設(shè)置的翻頁頁數(shù)按鈕有5個。那么上面的代碼就會出現(xiàn)問題,會多顯示4,5這2個按鈕。所以我們需要對end進行驗證。

    var totalPages=3;
    function slicePage(currentPage,showPages) {
        var begin=currentPage;
        var end=begin+showPages;
        if(end>totalPages){
            end=totalPages;
        }
        for(var i=begin;i<end;i++){
            console.log(i);
        }
    }
    slicePage(1,5);//1,2,3

如果我們傳的參數(shù)是1的話,那么結(jié)果是1,2,3.看上去沒什么問題,但是當(dāng)我們傳的參數(shù)是2的時候,打印出來的結(jié)果卻是2,3.按照常理來講沒,此時頁面上應(yīng)該保持?jǐn)?shù)量不變,結(jié)果應(yīng)該還是1,2,3。只不過currentPage變成了2而已。所以我們還需要對begin進行驗證。

    if(end>totalPages){
            end=totalPages+1;
            begin=end-showPages;
            begin=begin>0?begin:1;
        }

現(xiàn)在我們再來測試一下

    var totalPages=3;
    function slicePage(currentPage,showPages) {
        var begin=currentPage;
        var end=begin+showPages;
        if(end>totalPages){
            end=totalPages+1;
            begin=end-showPages;
            begin=begin>0?begin:1;
        }
        for(var i=begin;i<end;i++){
            console.log(i);
        }
    }
    slicePage(2,5);//1,2,3

在這種情況下,結(jié)果都是正常的。但是并沒有結(jié)束,我們還要對當(dāng)前頁在開始,中間,結(jié)尾部分這幾種情況進行測試。

    var totalPages=20;
    slicePage(1,5);//1,2,3,4,5
    slicePage(10,5);//10,11,12,13,14
    slicePage(17,5);//16,17,18,19,20
    slicePage(20,5);//16,17,18,19,20
    totalPages=3;
    slicePage(2,5);//1,2,3

經(jīng)過測試,發(fā)現(xiàn)我們打印出來的結(jié)果都是正確的,至此,生成頁面上按鈕個數(shù)和按鈕頁數(shù)的函數(shù)已經(jīng)寫好了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容