在網頁制作時
為了更好地組織信息
使顯示的信息分類明確
層次清晰
網頁制作者往往費盡心機
常用的方法有用樹型結構顯示信息
用表格進行網頁布局
用框架(frame)組織頁面等等
但對於習慣了Windows操作系統的用戶來說
利用菜單操作可以算是最自然的方法了
下面我們就來看一下怎樣在網頁中設計下拉式菜單
下拉式菜單由若干個顯示在窗口頂部的主菜單條和各個菜單條下面的子菜單組成
每個子菜單往往還包含幾個子菜單項
通常
只有菜單條顯示在窗口中
並且當鼠標指針指向菜單條時
菜單條的子菜單才顯示出來
當鼠標指針離開菜單時
子菜單則隱藏起來
回到只顯示主菜單條的狀態
根據上述下拉菜單的特點
我們就可以開始在網頁中制作下拉菜單了
我們在網頁的頂部放置一個區域
用於顯示主菜單條
每一個主菜單條作為一個超鏈接橫向置於該區域中
當然除非菜單項沒有子菜單
一般情況下這裡的超鏈接不指向任何地址
只用它來激活子菜單
區域的格式見程序
<DIV ID=
pad
……>
<A ID=
pad
onmouseout=
mouseout(); hideMenu();
onmouseover=
mouseover();
doMenu(
idpad
);
onclick=
window
event
returnValue=false;
>菜單項一</A>
<A ID=
pad
onmouseout=
mouseout(); hideMenu();
onmouseover=
mouseover();
doMenu(
idpad
);
onclick=
window
event
returnValue=false;
>菜單項二</A>
……
</DIV>
接著
我們根據主菜單條的個數定義相應的子菜單
為每個子菜單定義一個區域
該區域中第一個元素是一條橫線
然後每個子菜單作為一個超鏈接置於該區域中
由於子菜單縱向排列
每個超鏈接後加<BR>換行
當然這個區域現在還不能顯示出來
但當它被激活時
其顯示位置應位於其他對象之上
所以其style屬性置為STYLE=
display:none; z
index:
;
注意每個超鏈接的ID均應與其主菜單的ID相同
以便於統一處理
格式見程序
<SPAN ID=
idpad
STYLE=
display:none; z
index:
;
onmouseout=
hideMenu();
>
<HR STYLE=
position:absolute;left:
;top:
;color:white
SIZE=
>
<DIV >
<A ID=
pad
HREF=
onmouseout=
mouseout();
onmouseover=
mouseover()
>
子菜單項一一</A><BR>
<A ID=
pad
HREF=
onmouseout=
mouseout();
onmouseover=
mouseover()
>
子菜單項一二</A><BR>
<HR STYLE=
color:white
SIZE=
><!
如有必要可以用橫線對子菜單分組
>
<A ID=
pad
HREF=
onmouseout=
mouseout();
onmouseover=
mouseover()
>
子菜單項一三</A><BR>
……
</DIV>
</SPAN>
經過上面的步驟
下拉菜單的格式已經定義好了
下面的任務就是控制這些子菜單的顯示和隱藏
當鼠標移動到主菜單條上時
應顯示其子菜單
我們通過執行doMenu(MenuID)響應主菜單的onmouseover事件來完成
過程的參數MenuID是代表子菜單的區域的ID
過程執行時先設置window
event
cancelBubble = true
並計算子菜單顯示的位置
包括左上角和右下角坐標
然後執行下列語句來顯示子菜單所在區域
CurMenu
style
clip =
rect(
)
;CurMenu
style
display =
block
;
當鼠標移出主菜單時有兩種情況
一種情況是鼠標在子菜單及其主菜單之間移動
這時不能隱藏子菜單
另一種情況是鼠標移出了子菜單及其主菜單的區域
這時需要隱藏子菜單
我們通過執行hideMenu()響應主菜單的onmouseout
同時執行hideMenu()響應子菜單所在區域的onmouseout事件來完成
網頁中的另外兩個函數mouseout() 和mouseover() 的功能很簡單
分別用於處理鼠標移動時菜單項的顏色變化
網頁浏覽運行環境為IE
以上版本
<HTML>
<HEAD>
<TITLE>網頁中的下拉菜單</TITLE>
</HEAD>
<SCRIPT LANGUAGE=
JavaScript
>
var IsDroped =false;
function mouseout()
{
window
event
lor =
white
;//鼠標移開時置為白色
}
function mouseover()
{
window
event
lor =
red
;//鼠標進入時置為紅色//鼠標進入時置為紅色
}
function doMenu(MenuID)
{
var CurMenu = document
all(MenuID);
//為避免閃爍
如果下拉菜單已經顯示則不重畫
if (IsDroped==true)
{
window
event
cancelBubble = true;
return false;
}
window
event
cancelBubble = true;
TempMenu = CurMenu;
//計算下拉菜單的位置
x = window
event
srcElement
offsetLeft + window
event
srcElement
offsetParent
offsetLeft;
x
= x + window
event
srcElement
offsetWidth;
y = pad
offsetHeight;
CurMenu
style
top = y;
CurMenu
style
left = x;
CurMenu
style
clip =
rect(
)
;
CurMenu
style
display =
block
;
//延時
毫秒後再顯示菜單
保證Toolbarmenu
offsetHeight有值
避免從主菜單移向下拉菜單時下拉菜單消失
window
setTimeout(
showMenu()
);
return true;
}
function showMenu()
{
y
= y + TempMenu
offsetHeight;
TempMenu
style
clip =
rect(auto auto auto auto)
;
IsDroped =true;//下拉菜單已經顯示
}
function hideMenu()
{
//如果在下拉菜單的范圍之內移動則不隱藏
cY = event
clientY + document
body
scrollTop;
if (cY>=y && cY<y
&& event
clientX >= (x+
) && event
clientX <= x
||
cY>
&& cY<y && event
clientX >= (x+
) && event
clientX <= x
)
{ window
event
cancelBubble = true; return;}
//隱藏
TempMenu
style
display =
none
;
window
event
cancelBubble = true;
IsDroped =false;
}
</SCRIPT>
<body topmargin=
leftmargin=
marginheight=
marginwidth=
>
<DIV ID=
menu
STYLE=
position:absolute;background
color:white;width:
%;top:
;left:
;
>
<DIV ID=
pad
STYLE=
position:relative;height:
;width:
%;font:bold
pt 宋體;background
color:#
FFF;color:white;
>
<A TARGET=
_top
TITLE=
ID=
pad
onmouseout=
mouseout(); hideMenu();
onmouseover=
mouseover(); doMenu(
idpad
);
>
菜單項一
</A>
<SPAN > </SPAN>
<A TARGET=
_top
TITLE=
ID=
pad
onmouseout=
mouseout(); hideMenu();
onmouseover=
mouseover(); doMenu(
idpad
);
onclick=
window
event
returnValue=false;
>
菜單項二
</A>
</DIV>
</DIV>
<SPAN ID=
idpad
STYLE=
display:none;position:absolute;width:
;background
color:#
FFF;padding
top:
;padding
left:
;padding
bottom:
;z
index:
;
onmouseout=
hideMenu();
>
<HR STYLE=
position:absolute;left:
;top:
;color:white
SIZE=
>
<DIV STYLE=
position:relative;left:
;top:
;
>
<A ID=
pad
STYLE=
text
decoration:none;cursor:hand;font:bold
pt 宋體;color:white
HREF=
TARGET=
_top
onmouseout=
mouseout();
onmouseover=
mouseover()
>
子菜單項一一
</A><BR>
<A ID=
pad
STYLE=
text
decoration:none;cursor:hand;font:bold
pt 宋體;color:white
HREF=
TARGET=
_top
onmouseout=
mouseout();
onmouseover=
mouseover()
>
子菜單項一二
</A><BR>
<A ID=
pad
STYLE=
text
decoration:none;cursor:hand;font:bold
pt 宋體;color:white
HREF=
TARGET=
_top
onmouseout=
mouseout();
onmouseover=
mouseover()
>
子菜單項一三
</A>
</DIV>
</SPAN>
<SPAN ID=
idpad
STYLE=
display:none;position:absolute;width:
;background
color:#
FFF;padding
top:
;padding
left:
;padding
bottom:
;z
index:
;
onmouseout=
hideMenu();
>
<HR STYLE=
position:absolute;left:
;top:
;color:white
SIZE=
>
<DIV STYLE=
position:relative;left:
;top:
;
>
<A ID=
pad
STYLE=
text
decoration:none;cursor:hand;font:bold
pt 宋體;color:white
HREF=
TARGET=
_top
onmouseout=
mouseout();
onmouseover=
mouseover()
>
子菜單項二一</A><BR>
<A ID=
pad
STYLE=
text
decoration:none;cursor:hand;font:bold
pt 宋體;color:white
HREF=
TARGET=
_top
onmouseout=
mouseout();
onmouseover=
mouseover()
>
子菜單項二二</A><BR>
<A ID=
pad
STYLE=
text
decoration:none;cursor:hand;font:bold
pt 宋體;color:white
HREF=
TARGET=
_top
onmouseout=
mouseout();
onmouseover=
mouseover()
>
子菜單項二三</A><BR>
<HR STYLE=
color:white
SIZE=
><!
分隔行
>
<A ID=
pad
STYLE=
text
decoration:none;cursor:hand;font:bold
pt 宋體;color:white
onclick=
parent
close()
onmouseout=
mouseout();
onmouseover=
mouseover()
>
退出系統</A>
</DIV>
</SPAN>
<!
頁面的其它內容
>
</BODY>
</HTML>
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19645.html