JS再構成ページング

13816 ワード

JS再構成ページング
以前にJqueryページングコンポーネントを書いたことがありますが、当時書いたコンポーネントには欠点がありました.当時のJSプラグインはこのように設計されていました.例えば、-->クエリーボタン-->ajaxをクリックして総ページ数とすべてのデータを返すように要求し、総ページ数を手に入れて私のページングコードを呼び出し、合計何ページを計算し、ページ番号ボタンを表示し、コールバックに成功した後、さらにAjaxリクエストを送り、すべてのデータリクエストを返します.これには、クエリーボタンをクリックするたびに2つのAJAXリクエストが連続して送信され、フロントエンドのパフォーマンスに友好的ではないという欠点があります.だから今晩彼らに再カプセル化して、もちろん以前の論理は変わっていません.ただ1つの構成項目と数行のコードを追加して、初期化の時に1つの方法で初期化しました.次のようなJSPedbleがあります.
JSPedbleアドレスは次のとおりです:ページ番号をクリックして、火狐やグーグルコンソールを使って私が印刷したデータを見て、へへ!
構成パラメータは次のとおりです.
   container
'、ページコンテナのデフォルトは空です.
 perPage
10,1ページあたりのデータ数デフォルトで10データ
 curIndex
1現在のインデックスは、最初のページからデフォルトで開始されます.
 itemCount
',レコード総数はデフォルトで空の必須開発に返される
 totalPages
0,合計何ページを開発して総数を返して計算する必要があります
 buttonAmount
10ページごとに表示されるボタンの数
 isAutoClick
trueは、前のページと次のページがデフォルトでtrueに追加されたパラメータとしてカプセル化されているかどうかです.
すべてのJSコードは以下の通りです.
      function Pagination(){

         

         this.config = {

            container        :     '',    //     

            perPage          :     10,    //              10   

            curIndex         :     1,     //            

            itemCount        :     100,   //          100 

            totalPages       :     0,     //    

            buttonAmount     :     10,    //           

            isAutoClick      :    true    //                       true

         };

         

     };



     Pagination.prototype = {



         constructor:Pagination,



         init: function(customConfig,callback){

            this.config = $.extend(this.config, customConfig || {});

            var  _self = this,

                 _config = _self.config;

            _self._query(callback);

            return this;

        },

        _query: function(callback){

            var  _self = this,

                 _config = _self.config;

            var start,

                end,

                html = '',

                str = '';

            _self._calculate();

            start = Math.max(1,_config.curIndex - parseInt(_config.buttonAmount/2));

            

            end = Math.min(_config.totalPages,start + _config.buttonAmount - 1);

            

            str += '<div class="PagerView">';



            //        1  

            if(_config.totalPages > 1) {

                if(_config.curIndex != 1) {

                    str += '<a href="javascript://1"><span>|<</span></a>';

                    str += '<a href="javascript://' + (_config.curIndex-1) + '"><span><<</span></a>';

                }else {

                    str += '<span>|<</span>';

                    str += '<span><<</span>';

                }

            }

            for(var i = start; i <= end; i+=1) {

                if(i == _config.curIndex) {

                    str += '<span class="on">' + i + "</span>";

                }else {

                    str += '<a href="javascript://' + i + '"><span>' + i + "</span></a>";

                }

            }

            if(_config.totalPages > 1){

               if(_config.curIndex != _config.totalPages){

                str += '<a href="javascript://' + (_config.curIndex+1) + '"><span>>></span></a>';

                str += '<a href="javascript://' + _config.totalPages + '"><span>>|</span></a>';

               }else{

                str += '<span>>></span>';

                str += '<span>>|</span>';

               }

            }



            str += '   ' + _config.totalPages + ' , ' + _config.itemCount + '    ';



            str += "</div>";



            //           

            $(_config.container).html(str);



            if(_config.isAutoClick){

                //          

                var a_list = $(_config.container + ' a');

                for(var i=0; i<a_list.length; i++){

                   a_list[i].onclick = function(){

                        var index = $(this).attr('href');

                        if(index != undefined && index != ''){

                            index = parseInt(index.replace('javascript://', ''));

                            _self.click(index,callback);

                        }

                   };

                }

            }

            return this;

        },

        

        _getSelectValue: function(select){

            var idx = select.selectedIndex,   //       

                option,

                value;

                

            if(idx > -1) {

                option = select.options[idx];  //     option  

                console.log(option);

                value = option.attributes.value;

                return (value && value.specified) ? option.value : option.text;

            }

            return null;

        },

        click: function(index,callback) {

            var _self = this,

                _config = _self.config;

            _config.curIndex = index;

            _self._query(callback);

            callback && $.isFunction(callback) && callback(_config);

            return this;

        },



        /**

         *                .

         */

        _calculate: function(){

            var _self = this,

                _config = _self.config;



            //       = parseInt(Math.ceil(    /       ),10)

            _config.totalPages = parseInt(Math.ceil(_config.itemCount/_config.perPage),10);

            _self.curIndex = parseInt(_self.curIndex,10);



            if(_self.curIndex > _config.totalPages) {

                _self.curIndex = _config.totalPages;

            }

        }

     };

呼び出し方法は次のとおりです.
 1. 1つ目は、isAutoClickパラメータがtrueにデフォルトで設定されているすべてのクリックがページングコードの内部で処理されていることです.欠点は、クエリーボタンをクリックするたびにajaxリクエストが2回連続して送信されることです.sAutoClick
var pager = new Pagination().init({

    container: '#pager'

 },function(cfg){

        console.log(cfg);

});

 2. 2つ目の初期化方法は、isAutoClick falseを参照してインスタンス化した後、外部でclickイベントを呼び出して他のことをします.次のようにします.
var pager = new Pagination().init({

        container: '#pager',

        isAutoClick: false

    });

//          

$("#pager").delegate('a','click',function(){

    var curIndex = $(this).attr('href');

        if(curIndex != undefined && curIndex != ''){

            curIndex = parseInt(curIndex.replace('javascript://', ''));

            pager.click(curIndex,function(cfg){

                    console.log(cfg);

            });

        }

});

第2の方法の利点:クエリーボタンをクリックした後、一度だけリクエストが成功した後、ページングコードを初期化し、あるページをクリックするコードを書き、まだクリックしていないので、最初は一度だけリクエストします.
DEMOダウンロード