Bookmark and Share

Lee's 程序人生

HTML CSS Javascript XML AJAX ATLAS C# C++ 数据结构 软件工程 设计模式 asp.net Java 数字图象处理 Sql 数据库
  博客园  :: 首页  :: 新随笔  :: 联系 :: 管理

转:使用JAVASCRIPT分页V2.0beta版本

Posted on 2008-09-24 22:35  analyzer  阅读(387)  评论(1编辑  收藏  举报

来源地址:http://www.phpobject.net/blog/

 今天花了一天的时间重新编写。
特点:
1、单纯JAVASCRIPT代码,不依赖任何其他的库类。
2、支持AJAX分页或者自定义URL模式。对ZF或者我的PHP的路由模式有很好的支持(index.php/pageid/1.htm)
3、支持多种显示模式。(简单的,类似百度的等等。)
4、制定自定义风格。
5、性能较好。
6、完全面对对象,支持继承。
7、能够自动解析URL获取当前页并自动设置URL参数
详细代码不解释,提供库类文件

 

  1 /**
  2  * js的分页类
  3  * @author : feifengxlq <feifengxlq#gmail.com>
  4  * @copyright : http://www.phpobject.net
  5 */
  6 function Pagebar(_total,_pagesize,_nowpage)
  7 {
  8   /**
  9    * 基本配置信息
 10   */
 11   this._pageName = 'pageid';
 12   this._nextPageText = '下一页';
 13   this._prePageText = '上一页';
 14   this._firstPageText = '首页';
 15   this._lastPageText = '尾页';
 16   this._preBarText = '<<';
 17   this._nextBarText = '>>';
 18   this._pageBarNum = 10;
 19   this._leftFormat = '[';
 20   this._rightFormat = ']';
 21   this._alwaysDisplay = true;//是否总是显示
 22   this._urlHeader = '';//设置URL头
 23 
 24   /**
 25    * 分页相关数据
 26   */
 27   this._total = 0;
 28   this._totalPage = 0;
 29   this._pageSize = 10;
 30   this._nowPage = 1;
 31   this._offset = 0;
 32   /**
 33    * 构造函数
 34   */
 35   this._init = function(){    
 36     this._total = parseInt(_total);
 37     this._pageSize = parseInt(_pagesize);
 38     if(_nowpage){
 39       this.setNowPage(_nowpage);
 40     }else{
 41       this._autoGetNowPage();
 42     }
 43   };  
 44   /**
 45    * 输出分页条
 46   */
 47   this.output = function()
 48   {
 49     document.write(this.getFirst() + this.getPreBar() + this.getPre() + this.getBar() + this.getNext() + this.getNextBar()  + this.getLast())
 50   }
 51   /**
 52    * 设置当前页面
 53   */
 54   this.setNowPage = function(_nowPageId)
 55   {
 56     this._nowPage = parseInt(_nowPageId);
 57     this._makePage();
 58   }
 59   /**
 60    * 设置当前URL头
 61   */
 62   this.setUrlHeader = function(_urlHeader)
 63   {
 64     this._urlHeader = _urlHeader;
 65   }
 66   /**
 67    * 自动获取当前的页面ID
 68   */
 69   this._autoGetNowPage = function()
 70   {
 71     var _urlStr = window.location.href;
 72     var _begin = _urlStr.indexOf('?');
 73     if(_begin!=-1)
 74     {
 75       //查找
 76       var _urlParams = _urlStr.substring(_begin+1).split('&');
 77       for(var i=0;i<_urlParams.length;i++)  
 78         {
 79         _urlParam = _urlParams[i].split("=");
 80         if(_urlParam[0]==this._pageName)
 81         {
 82           this._nowPage = parseInt(_urlParam[1]);
 83           break;
 84         } 
 85        }
 86       if(isNaN(this._nowPage))this._nowPage=1;
 87     }else{
 88       this._nowPage = 1;
 89     }
 90     this._makePage();
 91   }
 92   /**
 93    * 自动获取URL地址
 94   */
 95   this._autoGetUrl = function()
 96   {
 97     var _urlStr = window.location.href;
 98     var _begin = _urlStr.indexOf('?');
 99     if(_begin!=-1)
100     {
101       _tStr = this._pageName + '=' + this._nowPage;
102       _beign = _urlStr.indexOf(_tStr);
103       if(_beign!=-1)
104       {
105         _tstrLen = _tStr.length;
106         if( (_urlStr.substring(_begin,_begin+1)=='&')&&(_urlStr.substring(_beign+_tstrLen,_beign+_tstrLen+1)=='&') )
107         {
108           _urlStr = _urlStr.substring(0, _beign-1+ _urlStr.substring(_beign+_tstrLen, _urlStr.length); 
109         }else if( (_urlStr.substring(_begin,_begin+1)=='?')&&(_urlStr.substring(_beign+_tstrLen,_beign+_tstrLen+1)=='&') )
110         {
111           _urlStr = _urlStr.substring(0, _beign) + _urlStr.substring(_beign+_tstrLen+1, _urlStr.length); 
112         }else if( (_urlStr.substring(_begin,_begin+1)=='?')&&(_urlStr.substring(_beign+_tstrLen,_beign+_tstrLen+1)=='') ){
113           return _urlStr.substring(0, _beign);
114         }else{
115           _urlStr = _urlStr.substring(0, _beign) + _urlStr.substring(_beign+_tstrLen, _urlStr.length); 
116         }
117       }
118       _urlStr += '&';
119     }else{
120       _urlStr += '?';
121     }
122     return _urlStr;
123   }
124   /**
125    * 获取偏移量
126   */
127   this.getOffset = function(){
128     return this._offset;
129   };
130   /**
131    * 获取首页
132   */
133   this.getFirst = function(_className,_nowPageNoLink)
134   {
135     if(typeof _nowPageNoLink == 'undefined')_nowPageNoLink = false;
136     if(this._total == 0)return '';
137     if( (this._nowPage == 1)&&(_nowPageNoLink) ) return this.getNoLinkItem(1,_className,this._firstPageText);
138     return this.getLinkItem(1,_className,this._firstPageText);
139   };
140   /**
141    * 获取尾页
142   */
143   this.getLast = function(_className,_nowPageNoLink)
144   {
145     if(typeof _nowPageNoLink == 'undefined')_nowPageNoLink = false;
146     if(this._total == 0)return '';    
147     if( (this._nowPage == this._totalPage)&&(_nowPageNoLink) ) return this.getNoLinkItem(this._totalPage,_className,this._lastPageText);
148     return this.getLinkItem(this._totalPage,_className,this._lastPageText);
149   };
150   /**
151    * 获取分页条
152   */
153   this.getBar = function(_className,_nowPageClassName,_nowPageNoLink)
154   {
155     if(typeof _nowPageNoLink == 'undefined')_nowPageNoLink = false;
156     if(this._total == 0)return '';    
157     
158     _plus = Math.ceil(this._pageBarNum/2);
159       ifthis._pageBarNum - _plus + this._nowPage > this._totalPage )
160         _plus = (this._pageBarNum - this._totalPage + this._nowPage);
161         _begin = this._nowPage - _plus + 1;
162         _begin = (_begin>=1)?_begin:1;
163         
164         var _return = '';
165         var _tmpPageText = ''
166         for(var _i = _begin ; _i < _begin + this._pageBarNum ; _i ++
167         { 
168           if(_i <= this._totalPage){
169             _tmpPageText = this._leftFormat + _i + this._rightFormat;     
170             if(_i == this._nowPage){
171               if(_nowPageNoLink){
172                 _return += this.getNoLinkItem(_i,_nowPageClassName,_tmpPageText);
173               }else{
174                 _return += this.getLinkItem(_i,_nowPageClassName,_tmpPageText);
175               }
176             }else{
177           _return += this.getLinkItem(_i,_nowPageClassName,_tmpPageText);
178             }
179             }else
180                 break
181             } 
182         }
183         return _return; 
184   };
185   /**
186    * 获取上一页
187   */
188   this.getPre = function(_className,_alwaysDisplay)
189   {
190     if(typeof _alwaysDisplay == 'undefined')_alwaysDisplay = this._alwaysDisplay;//是否总是显示
191     if(this._total == 0)return '';
192     if( (_alwaysDisplay)||(this._nowPage>1) )return this.getLinkItem(this._nowPage-1,_className,this._prePageText);
193     return '';
194   };
195   /**
196    * 获取下一页
197   */
198   this.getNext = function(_className,_alwaysDisplay)
199   {
200     if(typeof _alwaysDisplay == 'undefined')_alwaysDisplay = this._alwaysDisplay;//是否总是显示
201     if(this._total == 0)return '';
202     if( (_alwaysDisplay)||(this._nowPage<this._totalPage) )return this.getLinkItem(this._nowPage+1,_className,this._nextPageText);
203     return '';
204   }
205   /**
206    * 获取下一分页条
207   */
208   this.getNextBar = function(_className,_alwaysDisplay)
209   {
210     if(typeof _alwaysDisplay == 'undefined')_alwaysDisplay = this._alwaysDisplay;//是否总是显示,默认总是显示
211     if( (_alwaysDisplay)||(this._nowPage<this._totalPage) ) 
212     {
213       _pageno = this._nowPage + this._pageBarNum;
214       if(_pageno>this._totalPage) _pageno = this._totalPage;
215       return this.getLinkItem(_pageno,_className,this._nextBarText)
216     }
217     return '';
218   }
219   
220   /**
221    * 获取上一分页条
222   */
223   this.getPreBar = function(_className,_alwaysDisplay)
224   {
225     if(typeof _alwaysDisplay == 'undefined')_alwaysDisplay = this._alwaysDisplay;//是否总是显示,默认总是显示
226     if( (_alwaysDisplay)||(this._nowPage>1) )
227     {
228       _pageno = this._nowPage - this._pageBarNum;
229       if(_pageno<1) _pageno = 1;
230       return this.getLinkItem(_pageno,_className,this._preBarText)
231     }
232     return '';
233     
234   }
235   /**
236    * 生成URL
237   */
238   this.getUrl = function(_pageid)
239   {
240     if(this._urlHeader=='')this._urlHeader = this._autoGetUrl();
241     return this._urlHeader + this._pageName + '=' + _pageid;
242   };
243   /**
244    * 获取分页项
245   */
246   this.getLinkItem = function(_pageid,_className,_pageText)
247   {
248     return '<a href="' + this.getUrl(_pageid) + '" class="' + _className + '">' + _pageText + '</a>';
249   };
250   /**
251    * 获取没有分页链接的项
252   */
253   this.getNoLinkItem = function(_pageid,_className,_pageText)
254   {
255     return this.getLinkItem(_pageid,_className,_pageText);
256   };
257   
258   this._makePage = function()
259   {
260     if(isNaN(this._total))return this._error('total不是一个有效的数字');
261     if(isNaN(this._pageSize))return this._error('pagesize不是一个有效的数字');
262     if(isNaN(this._nowPage))return this._error('nowpage不是一个有效的数字');
263     this._totalPage = Math.ceil(this._total/this._pageSize);
264     this._offset = 0;
265     if( (this._nowPage>0)&&(this._nowPage<=this._totalPage) ){
266       this._offset = (this._nowPage-1)*this._pageSize;
267     }
268   };
269   this._error = function (msg)
270   {
271     alert(msg);
272     return false;
273   };
274   
275   this._init();
276 }

277 

 

 

 

提供一个简单的AJAX测试代码(注意:测试代码需要jquery支持)

 1 <div id="ajaxPageTest"></div>
 2 <script type="text/javascript">
 3 function ajaxPageBar(_total,_pagesize)
 4 {
 5   this.base = Pagebar;
 6   this.base(_total,_pagesize);
 7   
 8   this._ajaxName = 'ajax_page';
 9   
10   this.getUrl = function(pageid)
11   {
12     return 'javascript:'+ this._ajaxName +'(' + pageid + ')';
13   }
14   
15   this.output = function()
16   {
17     return this.getFirst() + this.getPreBar() + this.getPre() + this.getBar() + this.getNext() + this.getNextBar()  + this.getLast()
18   }
19 }
20 
21 var page = new ajaxPageBar(1000,10);
22 page._ajaxName = 'ajax_test'
23 function ajax_test(pid)
24 {
25   page.setNowPage(pid)
26   $('#ajaxPageTest').html(page.output());
27 }
28 $(function(){
29   ajax_test(1)
30 })
31 </script>
32 
33 

 另外提供简单的常用测试代码

1 <script type="text/javascript">
2 var normalPageBar = new Pagebar(1000,20);
3 normalPageBar.output();
4 </script>
5 

 

 

我要啦免费统计