June 29th, 2007
前言
常在各個網站看到一種「讓畫面暗下來,然後跳出明亮(顯眼)對話盒」的效果,雖然可以用 Lightbox JS 或 thickbox 這些 toolkit 作出來,不過有時候用別人寫的工具容易會與其它工具產生衝突,所以才會想自己寫一個,順便當作練功。
準備食材(Prerequisites)
- HTML 基本知識
- CSS 基本知識
- JavaScript 基本知識
製作步驟
- 在這個例子中,我們使用一個按鈕來打開 light dialog,所以我們寫這樣一行 HTML:
<input type=”button” value=”開啟對話盒” onclick=”openDialog()” />
在這一行 HTML code 裡,我們宣告了一個「按鈕」,它的顯示文字是「開啟對話盒」,並且在按鈕被按下時,呼叫定義好的 JavaScript 函式-
openDialog() - 接下來就是開始寫 JavaScript 的 code 了,首先,我們宣告一個
overlay及一個LD_win這兩個變數,overlay用來代表使畫面看起來變暗的圖層,而LD_win用來表示顯示出來的對話盒。var overlay; var LD_dlg;
然後,定義一下
openDialog這個 JavaScript 函式:function openDialog() { ... }
- 在這個 function 裡面,建立
overlay為一個文件元件,為了要讓螢幕看起來變暗,這裡的想法是--塞一個div,背景色為黑色,而且要半透明顯示,我們先在 CSS 定義中定義這樣的東西:html { height: 100%; /* for stupid IE */ } #overlay { position: absolute; background-color: #000; width: 100%; height: 100%; opacity: 0.5; -moz-opacity: 0.5; filter: alpha(opacity=50); z-index: 100; }
所以用下列 JavaScript code 來處理
overlay:overlay = document.createElement(‘div’); /* 建立一個 div element */ overlay.id = ‘overlay’; document.body.appendChild(overlay); /* 把 overlay 這個圖層加入,此時整個畫面就會被 overlay 蓋住了。 */
- 這時只有一個蓋住全畫面的圖層,還沒有對話盒,所以先來定義對話盒的 CSS:
#LD_dlg { position: absolute; background-color: #fff; z-index: 102; }
然後,再到剛才加入
overlaycode 的位置,再加入下列的 code:LD_dlg = document.createElement(‘div’); LD_dlg.id = ‘LD_dlg’; LD_dlg.width = ‘320px’; LD_dlg.height = ‘240px’; LD_dlg.left = (document.body.clientWidth - 320) / 2 + ‘px’; LD_dlg.top = (document.body.clientHeight - 240) / 2 + ‘px’; LD_dlg.innerHTML = ‘<p style=”text-align: right”><a href=”#” onclick=”closeDialog();”>關閉</a></p>’; document.body.appendChild(LD_dlg);
- 如此一來,就會有一個白色背景的對話盒出現在畫面的正中央了,不過,這裡我們加入了一個關閉的功能,所以我們也要去定義對應的 JavaScript 函式:
function closeDialog() { document.body.removeChild(LD_dlg); document.body.removeChild(overlay); }
這樣,當按下對話盒上的「關閉」時,就會觸發這個 JavaScript 函式使畫面恢復原狀了。
- 你可以直接把對話盒的內容寫在
LD_dlg的innerHTML裡,也可以寫在別的 HTML 檔案裡再用 iframe 放進來,或者是利用 Ajax 去 request 一個 HTML 檔等等都可以。
其實很簡單對吧 :P
文章分類:
標籤:


2007/06/30 5:54 am
[...] Link to Article ajax [JS??] lightbox ???? » Posted at ericsk’s blog on Friday, June 29, 2007 [...]
2007/07/06 1:47 am
非常實用,感覺很適合像我這種「了解 html, css, 對 javascript 一知半解,沒啥開發經驗的人」,感覺像是 javascript lesson 1 :)
2007/07/09 4:44 pm
你好我是網頁新手,現再想寫一個你上面做的div 做一個登入畫面,像推推王那種登入畫面,可是看完你的程式碼還是不太會用,可否請教你一下
2007/07/09 4:45 pm
僵屍達:
你這樣子問, 我也不知道要怎麼幫你啊 Orz
2007/07/09 5:09 pm
它顯示錯誤你的第一行 iuput 必須要有一個物件
2007/08/26 4:47 pm
我使用了您的方法
不過沒有效果耶@@
變成網頁最底下才會出現一行的div畫面
2007/08/27 12:38 am
wei:
感覺起來是 position 沒有設成 absolute 或者是你計算 style.left, top, width, height 的地方有錯 @@
2007/08/28 12:30 am
我是完全按照上面的範例程式碼copy的@@
2007/08/28 12:32 am
應該要修改一些地方吧…Orz
2008/02/23 2:35 am
[quote comment=""][...]
Link to Article
ajax [JS??] lightbox ???? » Posted at ericsk’s blog on Friday, June 29, 2007 [...][/quote]
HELLO,我想請問一下LIGHTBOX JS,因為它在FRAMESET中無法全營幕顯示,只能在它的FRAME中,不知道有辦法讓它全營幕嗎?有人說可以在IFRAME,但我想要用在一般FRAME中,謝謝.
2008/04/28 7:27 am
說真的,不知道是不是IE 7 又多新問題…
#overlay {
position: absolute;
background-color: #000;
width: 100%;
height: 100%;
opacity: 0.5;
-moz-opacity: 0.5;
filter: alpha(opacity=50);
z-index: 100;
}
我加上了 top:0px; left:0px; 才肯給我乖乖完整蓋住畫面(不然上面和左邊都有空白)
2008/07/08 7:52 am
[...] [JS食譜] lightbox 實作練習 at 國二學生認真打雜 [...]