瘋狂的Lightbox
原文:http://particletree.com/features/lightbox-gone-wild/
?
1.Lightbox簡(jiǎn)介:
LightBox是一個(gè)很棒的模組窗口Javascript包,用它展示信息,要比新開(kāi)個(gè)窗口,或者強(qiáng)制彈出一個(gè)頁(yè)面都來(lái)的要好.
?
SpringSide2中在書(shū)店前臺(tái)用戶登錄里引入了LightBox。?
2.LightBox使用
2.1 所需文件
springside將lightbox文件都放在了widgets/lightbox目錄里?,要注意的是,必須要有激發(fā)LightBox效果的語(yǔ)句,才好引用lightbox.js,否則會(huì)js出錯(cuò)。
<script src="${ctx}/scripts/prototype.js"? type="text/javascript"></script>
<script src="${ctx}/widgets/lightbox/lightbox.js" type="text/javascript"></script>
<link href="${ctx}/widgets/lightbox/lightbox.css" type="text/css" rel="stylesheet">
2.2 激發(fā)LightBox效果
僅僅通過(guò) class="lbOn"即可完成這個(gè)效果,會(huì)用lightbox打開(kāi)login.jsp
<a href="login.jsp"? class="lbOn">SignUp</a>
2.3 退出LightBox效果
也是僅僅使用class="lbAction" rel="deactivate"
<a href="#" class="lbAction" rel="deactivate">Cancel<a>
2.4 在LightBox內(nèi)部連接至另外一個(gè)頁(yè)面:
直接使用a href連接過(guò)去即可,class仍然使用 class="lbAction" ,rel="insert";
<a href="confirm.html" class="lbAction" rel="insert">Go to Another Lightbox</a>
2.5 遮蓋效果配置
??? 修改lightbox.css
#overlay {
?display: none;
?position: absolute;
?top: 0;
?left: 0;
?width: 100%;
?height: 100%;
?z-index: 5000;
?background-color: #000;
?-moz-opacity: 0.5;
?opacity: .50;
?filter: alpha( opacity = 50 );
}
3. LightBox工作原理:
?當(dāng)用戶點(diǎn)擊了class="lbOn"樣式的a href連接,一個(gè)透明層會(huì)覆蓋頁(yè)面頂層,并且在第一次載入的調(diào)入下面這些:
?
<div id="overlay"></div>
<div id="lightbox">
??? <div id="lbLoadMessage">
??????? <p>Loading</p>
??? </div>
</div>
? 如果想改變載入事的消息,只需要修改 <div id="lightbox">中的<div id="lbLoadMessage">的信息,如改為 "載入中"。
??載入的代碼如下:
?function initialize(){
???? lbox = document.getElementsByClassName('lbOn');
???? for(i = 0; i < lbox.length; i++) {
???????? valid = new lightbox(lbox[i]);
???? }
}
CSS覆蓋效果代碼:
#lightbox{
??? display:none;
??? position: absolute;
??? top:50%;
??? left:50%;
??? z-index:9999;
??? width:500px;
??? height:400px;
??? margin:-220px 0 0 -250px;
??? }
#lightbox[id]{ /* IE6 and below Can't See This */
??? position:fixed;
??? }
#overlay{
??? display:none;
??? position:absolute;
??? top:0;
??? left:0;
??? width:100%;
??? height:100%;
??? z-index:5000;??
??? background-color:#000;
??? -moz-opacity: 0.8;
??? opacity:.80;
??? filter: alpha(opacity=80);
??? }
#overlay[id]{ /* IE6 and below Can't See This */
??? position:fixed;
??? }
覆蓋IE的html動(dòng)過(guò)下面這段:
prepareIE: function(height, overflow){
??? bod = document.getElementsByTagName('body')[0];
??? bod.style.height = height;
??? bod.style.overflow = overflow;
??? htm = document.getElementsByTagName('html')[0];
??? htm.style.height = height;
??? htm.style.overflow = overflow;
}
??
getScroll() & setScroll()getScroll:function (){
var yScroll;
if (self.pageYOffset) {
yScroll = self.pageYOffset;
} elseif (document.documentElement && document.documentElement.scrollTop){ yScroll = document.documentElement.scrollTop;
} elseif (document.body) { yScroll = document.body.scrollTop;
}
this.yPos = yScroll;
}
setScroll:function(x, y){
window.scrollTo(x, y);
}
在IE中,select表單位于頁(yè)面的頂層,<DIV/>會(huì)覆蓋不掉,同樣的FireFox中的Flash8夜是如此,我們都過(guò)以下代碼吧它們遮蓋掉。
hideSelects()
hideSelects: function(visibility){
selects = document.getElementsByTagName('select');
for(i = 0; i < selects.length; i++) {
selects\[i\].style.visibility = visibility;
}
},
4. Lightbox Class介紹
初始化時(shí):
initialize
initialize: function(ctrl) {
this.content = ctrl.href;
Event.observe(ctrl, 'click', this.activate.bindAsEventListener(this), false);
ctrl.onclick = function(){returnfalse;};
}
激活時(shí):
activate():
activate: function(){
if (browser == 'Internet Explorer'){
this.getScroll();
this.prepareIE('100%', 'hidden');
this.setScroll(0,0);
this.hideSelects('hidden');
}
this.displayLightbox("block");
},
displayLightbox():
displayLightbox: function(display){
$('overlay').style.display = display;
$('lightbox').style.display = display;
if(display \!= 'none') this.loadInfo();
},
loadInfo():
loadInfo: function() {
var myAjax = new Ajax.Request(
this.content,
{method: 'post', parameters: "", onComplete: this.processInfo.bindAsEventListener(this)}
);
},
processInfo():
processInfo: function(response){
info = "<div id='lbContent'>" + response.responseText + "</div>";
new Insertion.Before($('lbLoadMessage'), info)
$('lightbox').className = "done";
this.actions();
},
actions():
<a href="http: class="lbAction" rel="deactivate">cancel</a>
actions預(yù)先先吧 class="lbAction"給讀取到了。這樣點(diǎn)擊的時(shí)候,就知道改做什么動(dòng)作了。主要包括 rel="deactiveate" 和 rel="insert";
actions:function(){
lbActions = document.getElementsByClassName('lbAction');
for(i = 0; i < lbActions.length; i++) {
Event.observe(lbActions[i], 'click', this\[lbActions[i].rel\].bindAsEventListener(this), false);
lbActions[i].onclick = function()
{returnfalse;}
;
}
},
deactivate() 退出Ligthbox
如果退出LightBox 就使用rel = deactivate 代碼如下:
<a href="http: class="lbAction" rel="deactivate">cancel</a>
deactivate:function (){
Element.remove($('lbContent'));
if (browser == "Internet Explorer")
{ this.setScroll(0,this.yPos); this.prepareIE("auto", "auto"); this.hideSelects("visible"); }
this.displayBlock("none");
}
insert() 在LightBox內(nèi)部跳轉(zhuǎn)
在lightbox內(nèi)部,連接至另外一個(gè)頁(yè)面,就通過(guò)insert方法
<a href="http: class="lbAction" rel="deactivate">cancel</a>
insert: function(e){
link = Event.element(e).parentNode;
Element.remove($('lbContent'));
var myAjax = new Ajax.Request(
link.href,
{method: 'post', parameters: "", onComplete: this.processInfo.bindAsEventListener(this)}
);
},