QuickPager" />

【自然框架】js版的QuickPager分頁控件 V2.0


優點:

1、  通過更換模板可以控制各個分頁元素(比如首頁、末頁,頁號導航等)的位置和是否顯示。

2、  通過更換css可以實現各種UI風格和效果。(附帶24套css效果)

3、  Js的方式創建分頁UI,不占用服務器資源。

4、  可以通過插件的方式更換各部分js代碼。如果自帶的js代碼不能滿足您的需求,那么您自己寫的插件實現需要的效果。

5、  Ajax的方式獲取記錄集,減輕網絡負擔。

6、  多種調用方式,讓“偷懶”和靈活共存。

缺點:

1、  不支持SEO。因為用js和ajax,所以不支持搜索引擎的收錄。

2、  不支持服務器端控件,比如GridView。

 

內容介紹:

1、  模板

  設置一個htm頁面,存放分頁用的模板,這樣只要保證及格ID不變,其他的都可以隨意編排,想怎么編排就怎么編排,限制降到最低。模板如下: 

<div id="PageTurn" class="pager" >
    <span >共<font id="P_RecordCount" style="color:Red;"></font>條記錄</span>
    <span >第<font id="P_Index" style="color:Red;"></font>/<font id="P_PageCount" style="color:Red;"></font>頁</span>
    <span >每頁<font id="P_PageSize" style="color:Red;"></font>條記錄</span>
    <span id="S_First" class="disabled" >首頁</span>
    <span id="S_Prev"  class="disabled" >上一頁</span>
    <span id="S_navi"><!--頁號導航--></span>
    <span id="S_Next"  class="disabled" >下一頁</span>
    <span id="S_Last"  class="disabled" >末頁</span>
    <input id="Txt_GO" class="cssTxt" name="Txt_GO" type="text" size="1"  /> 
    <span id="P_GO" >GO</span>
</div>

  

2、  Css

  用css來控制UI樣式。這樣更換css文件就可以實現更換風格。前一陣子有園友分享了24套樣式,借鑒了一下。在這里大家一起感謝園友的分享。 

div.pager {
    text-align: center; padding-bottom: 10px; background-color: #000; margin: 3px; padding-left: 3px; padding-right: 3px; color: #a0a0a0; font-size: 80%; padding-top: 10px
}
div.pager a {
    background-image: url(bar.gif); border-bottom: #909090 1px solid; border-left: #909090 1px solid; padding-bottom: 2px; padding-left: 5px; padding-right: 5px; background-position: 50% bottom; color: #c0c0c0; border-top: #909090 1px solid; margin-right: 3px; border-right: #909090 1px solid; text-decoration: none; padding-top: 2px
}
div.pager a:hover {
    background-image: url(invbar.gif); border-bottom: #f0f0f0 1px solid; border-left: #f0f0f0 1px solid; background-color: #404040; color: #ffffff; border-top: #f0f0f0 1px solid; border-right: #f0f0f0 1px solid
}
div.pager a:active {
    background-image: url(invbar.gif); border-bottom: #f0f0f0 1px solid; border-left: #f0f0f0 1px solid; background-color: #404040; color: #ffffff; border-top: #f0f0f0 1px solid; border-right: #f0f0f0 1px solid
}
div.pager span.current {
    border-bottom: #ffffff 1px solid; border-left: #ffffff 1px solid; padding-bottom: 2px; background-color: #606060; padding-left: 5px; padding-right: 5px; color: #ffffff; border-top: #ffffff 1px solid; font-weight: bold; margin-right: 3px; border-right: #ffffff 1px solid; padding-top: 2px
}
div.pager span.disabled {
    border-bottom: #606060 1px solid; border-left: #606060 1px solid; padding-bottom: 2px; padding-left: 5px; padding-right: 5px; color: #808080; border-top: #606060 1px solid; margin-right: 3px; border-right: #606060 1px solid; padding-top: 2px
}
 

 

3、  Js腳本

  分為三個部分,默認值、主體和擴展。

  默認值就不用多說了,要想讓分頁能夠順利跑起來需要設置很多屬性,但是過多的屬性設置就很煩了,於是就有了“默認值”。常用的屬性值作為默認屬性,這樣在調用的時候就不用重復設置一大堆的屬性了。

Nature.Page.QuickPagerDefaultInfo = { 
    recordCount: -1,        //總記錄數
    pageSize: 10,           //一頁記錄數
    pageCount: -1,          //總頁數,不用設置,根據上兩個條件自動計算
    thisPageIndex: 1,       //當前頁號
    beforePageIndex: 1,     //上一次的頁號
    //lastPageIndex: 0,     //最后一頁的頁號,自動計算

    naviCount:7,            //頁號導航的數量
    isUseRecordCount: true,   //是否使用緩存的總記錄數

    pageTurnDivIDs: "",           //放置分頁控件的div的id,可以是多個,用半角逗號分隔
    
    //分頁控件模板的路徑和文件名
    templetPath:"/aspnet_client/QuickPager/PageTurn2.htm",  
    //分頁控件css文件的路徑和文件名
    cssPath: "/aspnet_client/QuickPager/skin/default/pager.css",
     
    OnPageChange: function () { },  //翻頁的事件
    NaviCreate: function () { },    //創建頁號導航
    SetPageUI: function () { },    //設置分頁UI
    RegPagerEvent: function () { }    //注冊分頁UI的事件,不包括頁號導航的事件
    
    
};

 

  主體,這個主體有一點MVC里的C的感覺——總體上的控制:加載模板、設置UI、創建頁號導航、注冊翻頁事件等等。他本身並不實現具體的功能,而是把這些功能組合起來。

//js版的QuickPager
Nature.Page.QuickPager = function () {
    this.pagerInfo = {};
    this.Start = function (callback) {
        //設置默認值
        setDefaultInfo(this.pagerInfo);
        var info = this.pagerInfo;

        //設置css。如果沒有設置,則不動態加載
        if (info.cssPath != undefined)
            Nature.CommonFunction.addStyle(info.cssPath);

        //加載模板
        $.get(info.templetPath, function (data) {
            //alert("加載分頁模板成功");

            //模板放到div里面
            var tmpdiv = info.pageTurnDivIDs.split(",");
            $("#" + tmpdiv[0]).html(data);

            if (info.recordCount != -1) info.SetPageUI(info); //設置分頁UI

            info.RegPagerEvent(info); //注冊事件(僅限上一頁、下一頁、首頁、末頁,不包括頁號導航)
            info.NaviCreate(info); //設置頁號導航

            //調用外部函數,提取記錄創建table
            info.OnPageChange(0, 1);

            if (callback != undefined)
                callback(); //回調

            //克隆多個分頁UI
            if (tmpdiv.length > 1) {
                window.setTimeout(function () {
                    var pageHtml = $("#" + tmpdiv[0]).clone(true);
                    for (var i = 1; i < tmpdiv.length; i++) {
                        $("#" + tmpdiv[i]).html(pageHtml);
                    }
                }, 100);
            }

        });
    };

    //設置默認值
    var setDefaultInfo = function (a) {
        var b = Nature.Page.QuickPagerDefaultInfo;
        if (a.recordCount == undefined) a.recordCount = b.recordCount;
        if (a.pageSize == undefined) a.pageSize = b.pageSize;
        if (a.pageCount == undefined) a.pageCount = b.pageCount;
        if (a.thisPageIndex == undefined) a.thisPageIndex = b.thisPageIndex;
        if (a.beforePageIndex == undefined) a.beforePageIndex = b.beforePageIndex;
        if (a.isUseRecordCount == undefined) a.isUseRecordCount = b.isUseRecordCount;
        if (a.naviCount == undefined) a.naviCount = b.naviCount;

        if (a.templetPath == undefined) a.templetPath = b.templetPath;

        if (a.NaviCreate == undefined) a.NaviCreate = Nature.Page.QuickPagerExtend.CreateNavi;
        if (a.SetPageUI == undefined) a.SetPageUI = Nature.Page.QuickPagerExtend.SetPageUI;
        if (a.RegPagerEvent == undefined) a.RegPagerEvent = Nature.Page.QuickPagerExtend.RegPagerEvent;

    };
}; 

  

  擴展,每一個功能都作為了一個擴展插件的形式,比如創建頁號導航。頁號導航有很多總形式,一中形式肯定不能滿足所有人的需求,那么怎么辦呢?把每種形式都羅列出來嗎?這樣整個分頁代碼就會比較臃腫。所以就想到了這種擴張的形式。在主體外面實現頁號導航的功能,在主體里調用。如果自帶的不能滿足,那么可以把自己寫一個替換掉自帶的。而總體結構不會發生變化。達到了“對擴展開放,對修改關閉”。

 

使用方法:

1、  設置“屬性”。

  雖然屬性有很多,但是最低只需要設置兩個屬性——總記錄數和存放分頁控件的容器ID。

  不設置總記錄數,就不知道有多少頁,頁號導航就做不出來,UI也沒法控制。而總記錄數又沒法設置默認值。

  存放分頁控件的容器ID,簡單的說就是DIV的ID,當然也可以放在td里面,只要設置好ID就行。如果要實現上下兩個分頁UI,那么只需要把這兩個ID用半角逗號分割,設置上就行。

2、  設置事件。

  翻頁的時候觸發的事件。Js的事件處理真的是太簡單了,就跟屬性一樣。弄個function就可以了。

  翻頁的時候觸發OnPageChange ,傳遞過來兩個參數,一個是翻頁前的頁號(oldPageIndex),一個是要翻到哪一頁( thisPageIndex)。

3、  開始呈現。

  屬性和事件設置好了之后就可以呈現了。調一個函數就可以,內部會自動調用OnPageChange(0,1)來呈現第一頁的數據。如果呈現之后還要做點什么的話,可以加一個回調函數。

 window.onload = function () {

        var page = new Nature.Page.QuickPager();

        //設置相關屬性
        page.pagerInfo = {
            recordCount: 102,       //總記錄數
            //pageSize: 10,           //一頁記錄數
            pageTurnDivIDs: "divQuickPage1",         //放置分頁控件的div的id,可以是多個,用半角逗號分隔

            //翻頁的事件
            OnPageChange: function (oldPageIndex, thisPageIndex) {
                alert("翻頁前頁號:" + oldPageIndex);
                alert("翻頁后頁號:" + thisPageIndex);

                //可以自行獲取記錄,創建table
            }
        };

        //開始
        page.Start(function () {
            //內部自動調用OnPageChange(0,1)。
        });

    };

 

在線演示:

http://www.naturefw.com/test/quickpager/PageTurn01.htm  

可以更換模板,可以更換css

  

鳴謝!

  感謝群里的兄弟們幫忙做測試,發現了幾個小bug和沒注意到的地方。

  如果大家也挺感興趣的話,歡迎加群:82598514

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM