代码改变世界

JAVASCRIPT 面向对象编程 通用翻页控件

2012-06-02 20:18  chris-shao  阅读(1813)  评论(2编辑  收藏  举报

JAVASCRIPT编程现在在网页前端中越来越占有更高比重。 也试着实现一个易扩展的JAVASCRIPT 类,在核心类中不依赖类库,另外,可以将此类作为jQuery的扩展使用。

 

注:本代码在Firefox. IE 9 标准模式中测试通过,。

 

核心类代码如下:

 

 1 /*
 2 通用翻页Javascript控件
 3 功能:提供通用的javascript控制
 4 特点:面向对象编程,提供翻页控件原型,易扩展,基于事件扩展
 5 开发:Chirs Shao 
 6 日期:2012-6-2
 7 */
 8 //Pager 构造函数
 9 var Pager=function(/*记录总数*/args){
10     if(typeof args=="number"&&args>0)
11         this.recordCount=args;
12     //如果传入对象.复制对象属性到Pager
13     else if(typeof args=="object")
14     {
15         for(n in args)
16         {
17             this[n]=args[n];
18         }
19     }
20 };
21 //当前页码初始值
22 Pager.prototype.pageIndex=0;
23 //当前页尺寸
24 Pager.prototype.pageSize=10;
25 //总记录数
26 Pager.prototype.recordCount=0;
27 //页总数只读
28 Pager.prototype.getPageCount=function(){return this.pageSize>0? Math.round( this.recordCount/this.pageSize):0}
29 //翻页控件显示函数,继承本类后,重写本函数实现自定义显示效果
30 Pager.prototype.Display=function(/*包含翻页控件的HTML对象*/container){
31 if(container)
32 this._container=container;//记录包含控件对象,当发生事件重写时不需要重新传递此值
33 var _html="";
34 for(var i=0;i<this.getPageCount();i++)
35 {
36     if(i==parseInt(this.pageIndex))//当前页.不需要事件
37     _html+="<span>"+(i+1)+"</span> &nbsp;&nbsp;";
38     else//需要翻页的页码
39     _html+="<a href='javascript:void(0)' rel='"+i+"'>"+(i+1)+"</a> &nbsp;&nbsp;";
40 }
41 var indexstr=1+parseInt(this.pageIndex);
42 //最后显示页码状态
43 this._container.innerHTML=_html+" &gt;"+indexstr+"/"+this.getPageCount();
44 //临时记录上下文对象
45     var self=this;
46     for(var i =0, nodes=this._container.childNodes;i<nodes.length;i++)
47     {
48         var  node=nodes[i];
49         if(node.tagName==='A')//为A标签的所有对象添加事件.
50         {
51             if(window.addEventListener)
52                 node.addEventListener("click",function(){pageIndexChange.call(self,this.rel)});
53             else if(window.attachEvent)
54                 node.attachEvent("onclick",function(){pageIndexChange.call(self,this.rel)});
55             
56         }
57     }
58     //内部调用函数.当改变当前页时使用
59     var pageIndexChange=function(index)
60     {
61         //更新对象中当前页码
62         self.pageIndex=index;
63         //更新显示
64         self.Display();
65         //如果有页码改变调用事件函数就调用.调用时需要自定义事件
66         if(typeof self.onPageIndexChange ==='function')
67         {
68             self.onPageIndexChange.call(self,self.pageIndex);
69         }
70     }
71 }

 

 创建jQuery 扩展。

 

1 //扩展jQuery对象,实现Pager扩展
2 jQuery.fn.Pager=function(recordcount,onchangeEvent){
3 var p=new Pager(recordcount);
4 p.Display(this[0]);
5 p.onPageIndexChange=onchangeEvent;
6 return this;
7 }

 

 测试调用。如果需要控制翻页内容,就需要在订阅事件中根据index的值,获取分页内容(从Ajax或者数组中,然后控制显示即可)

1 //当页面加载完后调用.创建测试对象.总记录数100,当页码改变时显示当前页码和总页码数
2 $(function(){
3 $("#content").html("请点击下面的页码");
4 $("#showpager").Pager(100,function(index){document.getElementById("content").innerHTML="总页数:"+this.getPageCount()+"/当前页"+index;});
5 })