百度空間的popup效果分析第1/3頁
更新時間:2008年10月10日 23:01:44 作者:
自從用firefox瀏覽器以來,就幾乎養(yǎng)成了一個習(xí)慣,就想用WebDeveloper把一些漂亮網(wǎng)站的js包括css給down下來分析一下,用來學(xué)習(xí)。
百度空間的彈出窗口和拖拽效果,看起來挺不錯的?,F(xiàn)在很多知名網(wǎng)站都是用的這樣的技術(shù)。下面把我down的js代碼發(fā)出來,我分析了一部分,但是還有很多東西不明白怎么回事,沒有寫注釋的部分,還請高手能幫我解釋一下。本人屬于初學(xué),有不對的地方還請多多指教。
在聲明一條吧,此代碼僅做學(xué)習(xí)用,技術(shù)版權(quán)屬于百度。
主要是一個叫做:popup.js的文件,如下:
/**//*********************************************** popup.js**************************************************/
//為數(shù)組Array添加一個push方法
//為數(shù)組的末尾加入一個對象
if(!Array.prototype.push)
{
Array.prototype.push=function ()
{
var startLength=this.length;
for(var i=0;i<arguments.length;i++)
{
this[startLength+i]=arguments[i];
}
return this.length;
}
};
//對G函數(shù)的參數(shù)進(jìn)行處理
function G()
{
//定義一個數(shù)組用來保存參數(shù)
var elements=new Array();
//循環(huán)分析G中參數(shù)的內(nèi)容
for(var i=0;i<arguments.length;i++)
{
var element=arguments[i];
//如果參數(shù)的類型為string,則獲得以這個參數(shù)為ID的對象
if(typeof element=='string')
{
element=document.getElementById(element);
}
//如果參數(shù)的長度為1
if(arguments.length==1)
{
return element;
}
//將對象加入到數(shù)組的末尾
elements.push(element);
};
return elements;
};
Function.prototype.bind=function (object)
{
var __method=this;
return function ()
{
__method.apply(object,arguments);
};
};
//綁定事件
Function.prototype.bindAsEventListener=function (object)
{
var __method=this;
return function (event){__method.call(object,event||window.event);};
};
Object.extend=function (destination,source)
{
for(property in source)
{
destination[property]=source[property];
};
return destination;
};
if(!window.Event)
{
var Event=new Object();
};
Object.extend(
Event,
{
observers:false,
element:function (event)
{
return event.target||event.srcElement;
},
isLeftClick:function (event)
{
return (((event.which)&&(event.which==1))||((event.button)&&(event.button==1)));
},
pointerX:function (event)
{
return event.pageX||(event.clientX+(document.documentElement.scrollLeft||document.body.scrollLeft));
},
pointerY:function (event)
{
return event.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)
{
var element=Event.element(event);
while(element.parentNode&&(!element.tagName||(element.tagName.toUpperCase()!=tagName.toUpperCase())))
element=element.parentNode;
return element;
},
_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);
}
else if(element.attachEvent)
{
this.observers.push([element,name,observer,useCapture]);
element.attachEvent('on'+name,observer);
};
},
unloadCache:function ()
{
if(!Event.observers)
return;
for(var i=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)
{
var element=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)
{
var element=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);
}
else if(element.detachEvent)
{
element.detachEvent('on'+name,observer);
};
}
}
);
在聲明一條吧,此代碼僅做學(xué)習(xí)用,技術(shù)版權(quán)屬于百度。
主要是一個叫做:popup.js的文件,如下:
/**//*********************************************** popup.js**************************************************/
//為數(shù)組Array添加一個push方法
//為數(shù)組的末尾加入一個對象
if(!Array.prototype.push)
{
Array.prototype.push=function ()
{
var startLength=this.length;
for(var i=0;i<arguments.length;i++)
{
this[startLength+i]=arguments[i];
}
return this.length;
}
};
//對G函數(shù)的參數(shù)進(jìn)行處理
function G()
{
//定義一個數(shù)組用來保存參數(shù)
var elements=new Array();
//循環(huán)分析G中參數(shù)的內(nèi)容
for(var i=0;i<arguments.length;i++)
{
var element=arguments[i];
//如果參數(shù)的類型為string,則獲得以這個參數(shù)為ID的對象
if(typeof element=='string')
{
element=document.getElementById(element);
}
//如果參數(shù)的長度為1
if(arguments.length==1)
{
return element;
}
//將對象加入到數(shù)組的末尾
elements.push(element);
};
return elements;
};
Function.prototype.bind=function (object)
{
var __method=this;
return function ()
{
__method.apply(object,arguments);
};
};
//綁定事件
Function.prototype.bindAsEventListener=function (object)
{
var __method=this;
return function (event){__method.call(object,event||window.event);};
};
Object.extend=function (destination,source)
{
for(property in source)
{
destination[property]=source[property];
};
return destination;
};
if(!window.Event)
{
var Event=new Object();
};
Object.extend(
Event,
{
observers:false,
element:function (event)
{
return event.target||event.srcElement;
},
isLeftClick:function (event)
{
return (((event.which)&&(event.which==1))||((event.button)&&(event.button==1)));
},
pointerX:function (event)
{
return event.pageX||(event.clientX+(document.documentElement.scrollLeft||document.body.scrollLeft));
},
pointerY:function (event)
{
return event.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)
{
var element=Event.element(event);
while(element.parentNode&&(!element.tagName||(element.tagName.toUpperCase()!=tagName.toUpperCase())))
element=element.parentNode;
return element;
},
_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);
}
else if(element.attachEvent)
{
this.observers.push([element,name,observer,useCapture]);
element.attachEvent('on'+name,observer);
};
},
unloadCache:function ()
{
if(!Event.observers)
return;
for(var i=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)
{
var element=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)
{
var element=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);
}
else if(element.detachEvent)
{
element.detachEvent('on'+name,observer);
};
}
}
);
相關(guān)文章
javascript中Date()函數(shù)在各瀏覽器中的顯示效果
本文給大家分享的是javascript中Date()函數(shù)在各瀏覽器中的顯示效果,由于各大瀏覽器的兼容性問題,本文做了這個測試,希望有需要的小伙伴可以少走些彎路2015-06-06純js代碼實現(xiàn)未知寬高的元素在指定元素中垂直水平居中顯示
本章節(jié)介紹一下如何實現(xiàn)未知寬高的元素在指定元素下實現(xiàn)垂直水平居中效果,代碼簡單易懂,需要的朋友可以參考下本文2015-09-09