自从用firefox浏览器以来,就几乎养成了一个习惯,就想用WebDeveloper把一些漂亮网站的js包括css给down下来分析一下,用来学习。百度空间的弹出窗口和拖拽效果,看起来挺不错的。现在很多知名网站都是用的这样的技术。下面把我down的js代码发出来,我分析了一部分,但是还有很多东西不明白怎么回事,没有写注释的部分,还请高手能帮我解释一下。本人属于初学,有不对的地方还请多多指教。
在声明一条吧,此代码仅做学习用,技术版权属于百度。
主要是一个叫做:popup.js的文件,如下:
在声明一条吧,此代码仅做学习用,技术版权属于百度。
主要是一个叫做:popup.js的文件,如下:
1/*********************************************** popup.js**************************************************/
2
3
4//为数组Array添加一个push方法
5//为数组的末尾加入一个对象
6if(!Array.prototype.push)
7{
8 Array.prototype.push=function ()
9 {
10 var startLength=this.length;
11 for(var i=0;i<arguments.length;i++)
12 {
13 this[startLength+i]=arguments[i];
14 }
15 return this.length;
16 }
17 };
18
19//对G函数的参数进行处理
20function G()
21{
22 //定义一个数组用来保存参数
23 var elements=new Array();
24 //循环分析G中参数的内容
25 for(var i=0;i<arguments.length;i++)
26 {
27 var element=arguments[i];
28
29 //如果参数的类型为string,则获得以这个参数为ID的对象
30 if(typeof element=='string')
31 {
32 element=document.getElementById(element);
33 }
34 //如果参数的长度为1
35 if(arguments.length==1)
36 {
37 return element;
38 }
39 //将对象加入到数组的末尾
40 elements.push(element);
41 };
42 return elements;
43};
44
45Function.prototype.bind=function (object)
46{
47 var __method=this;
48 return function ()
49 {
50 __method.apply(object,arguments);
51 };
52};
53
54//绑定事件
55Function.prototype.bindAsEventListener=function (object)
56{
57 var __method=this;
58 return function (event){__method.call(object,event||window.event);};
59};
60
61
62Object.extend=function (destination,source)
63{
64 for(property in source)
65 {
66 destination[property]=source[property];
67 };
68 return destination;
69};
70
71
72if(!window.Event)
73{
74 var Event=new Object();
75};
76
77Object.extend(
78 Event,
79
80 {
81 observers:false,
82 element:function (event)
83 {
84 return event.target||event.srcElement;
85 },
86
87 isLeftClick:function (event)
88 {
89 return (((event.which)&&(event.which==1))||((event.button)&&(event.button==1)));
90 },
91
92 pointerX:function (event)
93 {
94 return event.pageX||(event.clientX+(document.documentElement.scrollLeft||document.body.scrollLeft));
95 },
96
97 pointerY:function (event)
98 {
99 return event.pageY||(event.clientY+(document.documentElement.scrollTop||document.body.scrollTop));
100 },
101
102 stop:function (event)
103 {
104 if(event.preventDefault)
105 {
106 event.preventDefault();
107 event.stopPropagation();
108 }
109 else
110 {
111 event.returnValue=false;
112 event.cancelBubble=true;
113 };
114 },
115
116 findElement:function (event,tagName)
117 {
118 var element=Event.element(event);
119 while(element.parentNode&&(!element.tagName||(element.tagName.toUpperCase()!=tagName.toUpperCase())))
120 element=element.parentNode;
121 return element;
122 },
123
124 _observeAndCache:function (element,name,observer,useCapture)
125 {
126 if(!this.observers)
127 this.observers=[];
128 if(element.addEventListener)
129 {
130 this.observers.push([element,name,observer,useCapture]);
131 element.addEventListener(name,observer,useCapture);
132 }
133 else if(element.attachEvent)
134 {
135 this.observers.push([element,name,observer,useCapture]);
136 element.attachEvent('on'+name,observer);
137 };
138 },
139
140 unloadCache:function ()
141 {
142 if(!Event.observers)
143 return;
144 for(var i=0;i<Event.observers.length;i++)
145 {
146 Event.stopObserving.apply(this,Event.observers[i]);
147 Event.observers[i][0]=null;
148 };
149 Event.observers=false;
150 },
151
152 observe:function (element,name,observer,useCapture)
153
2
3
4//为数组Array添加一个push方法
5//为数组的末尾加入一个对象
6if(!Array.prototype.push)
7{
8 Array.prototype.push=function ()
9 {
10 var startLength=this.length;
11 for(var i=0;i<arguments.length;i++)
12 {
13 this[startLength+i]=arguments[i];
14 }
15 return this.length;
16 }
17 };
18
19//对G函数的参数进行处理
20function G()
21{
22 //定义一个数组用来保存参数
23 var elements=new Array();
24 //循环分析G中参数的内容
25 for(var i=0;i<arguments.length;i++)
26 {
27 var element=arguments[i];
28
29 //如果参数的类型为string,则获得以这个参数为ID的对象
30 if(typeof element=='string')
31 {
32 element=document.getElementById(element);
33 }
34 //如果参数的长度为1
35 if(arguments.length==1)
36 {
37 return element;
38 }
39 //将对象加入到数组的末尾
40 elements.push(element);
41 };
42 return elements;
43};
44
45Function.prototype.bind=function (object)
46{
47 var __method=this;
48 return function ()
49 {
50 __method.apply(object,arguments);
51 };
52};
53
54//绑定事件
55Function.prototype.bindAsEventListener=function (object)
56{
57 var __method=this;
58 return function (event){__method.call(object,event||window.event);};
59};
60
61
62Object.extend=function (destination,source)
63{
64 for(property in source)
65 {
66 destination[property]=source[property];
67 };
68 return destination;
69};
70
71
72if(!window.Event)
73{
74 var Event=new Object();
75};
76
77Object.extend(
78 Event,
79
80 {
81 observers:false,
82 element:function (event)
83 {
84 return event.target||event.srcElement;
85 },
86
87 isLeftClick:function (event)
88 {
89 return (((event.which)&&(event.which==1))||((event.button)&&(event.button==1)));
90 },
91
92 pointerX:function (event)
93 {
94 return event.pageX||(event.clientX+(document.documentElement.scrollLeft||document.body.scrollLeft));
95 },
96
97 pointerY:function (event)
98 {
99 return event.pageY||(event.clientY+(document.documentElement.scrollTop||document.body.scrollTop));
100 },
101
102 stop:function (event)
103 {
104 if(event.preventDefault)
105 {
106 event.preventDefault();
107 event.stopPropagation();
108 }
109 else
110 {
111 event.returnValue=false;
112 event.cancelBubble=true;
113 };
114 },
115
116 findElement:function (event,tagName)
117 {
118 var element=Event.element(event);
119 while(element.parentNode&&(!element.tagName||(element.tagName.toUpperCase()!=tagName.toUpperCase())))
120 element=element.parentNode;
121 return element;
122 },
123
124 _observeAndCache:function (element,name,observer,useCapture)
125 {
126 if(!this.observers)
127 this.observers=[];
128 if(element.addEventListener)
129 {
130 this.observers.push([element,name,observer,useCapture]);
131 element.addEventListener(name,observer,useCapture);
132 }
133 else if(element.attachEvent)
134 {
135 this.observers.push([element,name,observer,useCapture]);
136 element.attachEvent('on'+name,observer);
137 };
138 },
139
140 unloadCache:function ()
141 {
142 if(!Event.observers)
143 return;
144 for(var i=0;i<Event.observers.length;i++)
145 {
146 Event.stopObserving.apply(this,Event.observers[i]);
147 Event.observers[i][0]=null;
148 };
149 Event.observers=false;
150 },
151
152 observe:function (element,name,observer,useCapture)
153