百度空间的popup效果分析第1/3页

时间:2021-05-18

百度空间的弹出窗口和拖拽效果,看起来挺不错的。现在很多知名网站都是用的这样的技术。下面把我down的js代码发出来,我分析了一部分,但是还有很多东西不明白怎么回事,没有写注释的部分,还请高手能帮我解释一下。本人属于初学,有不对的地方还请多多指教。
在声明一条吧,此代码仅做学习用,技术版权属于百度。
主要是一个叫做:popup.js的文件,如下:
/***********************************************popup.js**************************************************/
//为数组Array添加一个push方法
//为数组的末尾加入一个对象
if(!Array.prototype.push)
{
Array.prototype.push=function()
{
varstartLength=this.length;
for(vari=0;i<arguments.length;i++)
{
this[startLength+i]=arguments[i];
}
returnthis.length;
}
};

//对G函数的参数进行处理
functionG()
{
//定义一个数组用来保存参数
varelements=newArray();
//循环分析G中参数的内容
for(vari=0;i<arguments.length;i++)
{
varelement=arguments[i];

//如果参数的类型为string,则获得以这个参数为ID的对象
if(typeofelement=='string')
{
element=document.getElementById(element);
}
//如果参数的长度为1
if(arguments.length==1)
{
returnelement;
}
//将对象加入到数组的末尾
elements.push(element);
};
returnelements;
};

Function.prototype.bind=function(object)
{
var__method=this;
returnfunction()
{
__method.apply(object,arguments);
};
};

//绑定事件
Function.prototype.bindAsEventListener=function(object)
{
var__method=this;
returnfunction(event){__method.call(object,event||window.event);};
};


Object.extend=function(destination,source)
{
for(propertyinsource)
{
destination[property]=source[property];
};
returndestination;
};


if(!window.Event)
{
varEvent=newObject();
};

Object.extend(
Event,

{
observers:false,
element:function(event)
{
returnevent.target||event.srcElement;
},

isLeftClick:function(event)
{
return(((event.which)&&(event.which==1))||((event.button)&&(event.button==1)));
},

pointerX:function(event)
{
returnevent.pageX||(event.clientX+(document.documentElement.scrollLeft||document.body.scrollLeft));
},

pointerY:function(event)
{
returnevent.pageY||(event.clientY+(document.documentElement.scrollTop||document.body.scrollTop));
},

stop:function(event)
{
if(event.preventDefault)
{
event.preventDefault();
event.stopPropagation();
}
else
{
event.returnValue=false;
event.cancelBubble=true;
};
},

findElement:function(event,tagName)
{
varelement=Event.element(event);
while(element.parentNode&&(!element.tagName||(element.tagName.toUpperCase()!=tagName.toUpperCase())))
element=element.parentNode;
returnelement;
},

_observeAndCache:function(element,name,observer,useCapture)
{
if(!this.observers)
this.observers=[];
if(element.addEventListener)
{
this.observers.push([element,name,observer,useCapture]);
element.addEventListener(name,observer,useCapture);
}
elseif(element.attachEvent)
{
this.observers.push([element,name,observer,useCapture]);
element.attachEvent('on'+name,observer);
};
},

unloadCache:function()
{
if(!Event.observers)
return;
for(vari=0;i<Event.observers.length;i++)
{
Event.stopObserving.apply(this,Event.observers[i]);
Event.observers[i][0]=null;
};
Event.observers=false;
},

observe:function(element,name,observer,useCapture)
{
varelement=G(element);
useCapture=useCapture||false;
if(name=='keypress'&&(navigator.appVersion.match(/Konqueror|Safari|KHTML/)||element.attachEvent))
name='keydown';
this._observeAndCache(element,name,observer,useCapture);
},

stopObserving:function(element,name,observer,useCapture)
{
varelement=G(element);
useCapture=useCapture||false;
if(name=='keypress'&&(navigator.appVersion.match(/Konqueror|Safari|KHTML/)||element.detachEvent))
name='keydown';
if(element.removeEventListener)
{
element.removeEventListener(name,observer,useCapture);
}
elseif(element.detachEvent)
{
element.detachEvent('on'+name,observer);
};
}
}
);
123下一页阅读全文

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章