百度空間的popup效果分析第2/3頁
更新時間:2008年10月10日 23:01:44 作者:
自從用firefox瀏覽器以來,就幾乎養(yǎng)成了一個習慣,就想用WebDeveloper把一些漂亮網(wǎng)站的js包括css給down下來分析一下,用來學習。
Event.observe(window,'unload',Event.unloadCache,false);
var Class=function ()
{
var _class=function ()
{
this.initialize.apply(this,arguments);
};
for(i=0;i<arguments.length;i++)
{
superClass=arguments[i];
for(member in superClass.prototype)
{
_class.prototype[member]=superClass.prototype[member];
};
};
_class.child=function ()
{
return new Class(this);
};
_class.extend=function (f)
{
for(property in f)
{
_class.prototype[property]=f[property];
};
};
return _class;
};
//改變百度空間的最頂端和最低端的div的id值
//如果flag為begin,則為彈出狀態(tài)的id值
//如果flag為end,則為非彈出狀態(tài)的id值,即原本的id值
function space(flag)
{
if(flag=="begin")
{
var ele=document.getElementById("ft");
if(typeof(ele)!="#ff0000"&&ele!=null)
ele.id="ft_popup";
ele=document.getElementById("usrbar");
if(typeof(ele)!="undefined"&&ele!=null)
ele.id="usrbar_popup";
}
else if(flag=="end")
{
var ele=document.getElementById("ft_popup");
if(typeof(ele)!="undefined"&&ele!=null)
ele.id="ft";
ele=document.getElementById("usrbar_popup");
if(typeof(ele)!="undefined"&&ele!=null)
ele.id="usrbar";
};
};
//**************************************************Popup類彈出窗口***************************************************************
var Popup=new Class();
Popup.prototype={
//彈出窗口中框架的name名稱
iframeIdName:'ifr_popup',
initialize:function (config)
{
//---------------彈出對話框的配置信息------------------
//contentType:設置內(nèi)容區(qū)域為什么類型:1為另外一個html文件 | 2為自定義html字符串 | 3為confirm對話框 | 4為alert警告對話框
//isHaveTitle:是否顯示標題欄
//scrollType:設置或獲取對話框中的框架是否可被滾動
//isBackgroundCanClick:彈出對話框后,是否允許蒙布后的所有元素被點擊。也就是如果為false的話,就會有全屏蒙布,如果為true的話,就會去掉全屏蒙布
//isSupportDraging:是否支持拖拽
//isShowShadow:是否現(xiàn)實陰影
//isReloadOnClose:是否刷新頁面,并關閉對話框
//width:寬度
//height:高度
this.config=Object.extend({contentType:1,isHaveTitle:true,scrollType:'yes',isBackgroundCanClick:false,isSupportDraging:true,isShowShadow:true,isReloadOnClose:true,width:400,height:300},config||{});
//----------------對話框的參數(shù)值信息------------------------
//shadowWidth :陰影的寬度
//contentUrl :html鏈接頁面
//contentHtml :html內(nèi)容
//callBack :回調(diào)的函數(shù)名
//parameter :回調(diào)的函數(shù)名中傳的參數(shù)
//confirmCon :對話框內(nèi)容
//alertCon :警告框內(nèi)容
//someHiddenTag:頁面中需要隱藏的元素列表,以逗號分割
//someHiddenEle:需要隱藏的元素的ID列表(和someToHidden的區(qū)別是:someHiddenEle是通過getElementById,而someToHidden是通過getElementByTagName,里面放的是對象)
//overlay :
//coverOpacity :蒙布的透明值
this.info={shadowWidth:4,title:"",contentUrl:"",contentHtml:"",callBack:null,parameter:null,confirmCon:"",alertCon:"",someHiddenTag:"select,object,embed",someHiddenEle:"",overlay:0,coverOpacity:40};
//設置顏色cColor:蒙布的背景, bColor:內(nèi)容區(qū)域的背景, tColor:標題欄和邊框的顏色,wColor:字體的背景色
this.color={cColor:"#EEEEEE",bColor:"#FFFFFF",tColor:"#709CD2",wColor:"#FFFFFF"};
this.dropClass=null;
//用來放置隱藏了的對象列表,在hiddenTag方法中第一次調(diào)用
this.someToHidden=[];
//如果沒有標題欄則不支持拖拽
if(!this.config.isHaveTitle)
{
this.config.isSupportDraging=false;
}
//初始化
this.iniBuild();
},
//設置配置信息和參數(shù)內(nèi)容
setContent:function (arrt,val)
{
if(val!='')
{
switch(arrt)
{
case 'width':this.config.width=val;
break;
case 'height':this.config.height=val;
break;
case 'title':this.info.title=val;
break;
case 'contentUrl':this.info.contentUrl=val;
break;
case 'contentHtml':this.info.contentHtml=val;
break;
case 'callBack':this.info.callBack=val;
break;
case 'parameter':this.info.parameter=val;
break;
case 'confirmCon':this.info.confirmCon=val;
break;
case 'alertCon':this.info.alertCon=val;
break;
case 'someHiddenTag':this.info.someHiddenTag=val;
break;
case 'someHiddenEle':this.info.someHiddenEle=val;
break;
case 'overlay':this.info.overlay=val;
};
};
},
iniBuild:function ()
{
G('dialogCase')?G('dialogCase').parentNode.removeChild(G('dialogCase')):function (){};
var oDiv=document.createElement('span');
oDiv.id='dialogCase';
document.body.appendChild(oDiv);
},
build:function ()
{
//設置全屏蒙布的z-index
var baseZIndex=10001+this.info.overlay*10;
//設置蒙布上的彈出窗口的z-index(比蒙布的z-index高2個值)
var showZIndex=baseZIndex+2;
//定義框架名稱
this.iframeIdName='ifr_popup'+this.info.overlay;
//設置圖片的主路徑
var path="http://img.baidu.com/hi/img/";
//關閉按鈕
var close='<input type="image" id="dialogBoxClose" src="'+path+'dialogclose.gif" border="0" width="16" height="16" align="absmiddle" title="關閉"/>';
//使用濾鏡設置對象的透明度
var cB='filter: alpha(opacity='+this.info.coverOpacity+');opacity:'+this.info.coverOpacity/100+';';
//設置全屏的蒙布
var cover='<div id="dialogBoxBG" style="position:absolute;top:0px;left:0px;width:100%;height:100%;z-index:'+baseZIndex+';'+cB+'background-color:'+this.color.cColor+';display:none;"></div>';
//設置彈出的主窗口設置
var mainBox='<div id="dialogBox" style="border:1px solid '+this.color.tColor+';display:none;z-index:'+showZIndex+';position:relative;width:'+this.config.width+'px;"><table width="100%" border="0" cellpadding="0" cellspacing="0" bgcolor="'+this.color.bColor+'">';
//設置窗口標題欄
if(this.config.isHaveTitle)
{
mainBox+='<tr height="24" bgcolor="'+this.color.tColor+'"><td><table style="-moz-user-select:none;height:24px;" width="100%" border="0" cellpadding="0" cellspacing="0" ><tr>'+'<td width="6" height="24"></td><td id="dialogBoxTitle" style="color:'+this.color.wColor+';font-size:14px;font-weight:bold;">'+this.info.title+' </td>'+'<td id="dialogClose" width="20" align="right" valign="middle">'+close+'</td><td width="6"></td></tr></table></td></tr>';
}
else
{
mainBox+='<tr height="10"><td align="right">'+close+'</td></tr>';
};
//設置窗口主內(nèi)容區(qū)域
mainBox+='<tr style="height:'+this.config.height+'px" valign="top"><td id="dialogBody" style="position:relative;"></td></tr></table></div>'+'<div id="dialogBoxShadow" style="display:none;z-index:'+baseZIndex+';"></div>';
//如果有蒙布
if(!this.config.isBackgroundCanClick)
{
G('dialogCase').innerHTML=cover+mainBox;
G('dialogBoxBG').style.height=document.body.scrollHeight;
}
else
{
G('dialogCase').innerHTML=mainBox;
}
Event.observe(G('dialogBoxClose'),"click",this.reset.bindAsEventListener(this),false);
//如果支持拖動,則設置拖動處理
if(this.config.isSupportDraging)
{
dropClass=new Dragdrop(this.config.width,this.config.height,this.info.shadowWidth,this.config.isSupportDraging,this.config.contentType);
G("dialogBoxTitle").style.cursor="move";
};
this.lastBuild();
},
lastBuild:function ()
{
//設置confim對話框的具體內(nèi)容
var confirm='<div style="width:100%;height:100%;text-align:center;"><div style="margin:20px 20px 0 20px;font-size:14px;line-height:16px;color:#000000;">'+this.info.confirmCon+'</div><div style="margin:20px;"><input id="dialogOk" type="button" value=" 確定 "/> <input id="dialogCancel" type="button" value=" 取消 "/></div></div>';
//設置alert對話框的具體內(nèi)容
var alert='<div style="width:100%;height:100%;text-align:center;"><div style="margin:20px 20px 0 20px;font-size:14px;line-height:16px;color:#000000;">'+this.info.alertCon+'</div><div style="margin:20px;"><input id="dialogYES" type="button" value=" 確定 "/></div></div>';
var baseZIndex=10001+this.info.overlay*10;
var coverIfZIndex=baseZIndex+4;
//判斷內(nèi)容類型決定窗口的主內(nèi)容區(qū)域應該顯示什么
if(this.config.contentType==1)
{
var openIframe="<iframe width='100%' style='height:"+this.config.height+"px' name='"+this.iframeIdName+"' id='"+this.iframeIdName+"' src='"+this.info.contentUrl+"' frameborder='0' scrolling='"+this.config.scrollType+"'></iframe>";
var coverIframe="<div id='iframeBG' style='position:absolute;top:0px;left:0px;width:1px;height:1px;z-index:"+coverIfZIndex+";filter: alpha(opacity=00);opacity:0.00;background-color:#ffffff;'><div>";
G("dialogBody").innerHTML=openIframe+coverIframe;
}
else if(this.config.contentType==2)
{
G("dialogBody").innerHTML=this.info.contentHtml;
}
else if(this.config.contentType==3)
{
G("dialogBody").innerHTML=confirm;Event.observe(G('dialogOk'),"click",this.forCallback.bindAsEventListener(this),false);
Event.observe(G('dialogCancel'),"click",this.close.bindAsEventListener(this),false);
}
else if(this.config.contentType==4)
{
G("dialogBody").innerHTML=alert;
Event.observe(G('dialogYES'),"click",this.close.bindAsEventListener(this),false);
};
},
//重新加載彈出窗口的高度和內(nèi)容
reBuild:function ()
{
G('dialogBody').height=G('dialogBody').clientHeight;
this.lastBuild();
},
show:function ()
{
//隱藏一些在info中制定的元素
this.hiddenSome();
//彈出窗口居中
this.middle();
//設置陰影
if(this.config.isShowShadow)
this.shadow();
},
//設置回調(diào)函數(shù)
forCallback:function ()
{
return this.info.callBack(this.info.parameter);
},
//為彈出窗口設置陰影
shadow:function ()
{
var oShadow=G('dialogBoxShadow');
var oDialog=G('dialogBox');oShadow['style']['position']="absolute";
oShadow['style']['background']="#000";
oShadow['style']['display']="";
oShadow['style']['opacity']="0.2";
oShadow['style']['filter']="alpha(opacity=20)";
oShadow['style']['top']=oDialog.offsetTop+this.info.shadowWidth;
oShadow['style']['left']=oDialog.offsetLeft+this.info.shadowWidth;
oShadow['style']['width']=oDialog.offsetWidth;oShadow['style']['height']=oDialog.offsetHeight;
},
相關文章
javascript中Date()函數(shù)在各瀏覽器中的顯示效果
本文給大家分享的是javascript中Date()函數(shù)在各瀏覽器中的顯示效果,由于各大瀏覽器的兼容性問題,本文做了這個測試,希望有需要的小伙伴可以少走些彎路2015-06-06純js代碼實現(xiàn)未知寬高的元素在指定元素中垂直水平居中顯示
本章節(jié)介紹一下如何實現(xiàn)未知寬高的元素在指定元素下實現(xiàn)垂直水平居中效果,代碼簡單易懂,需要的朋友可以參考下本文2015-09-09