ドロップダウンメニューその1
あちこちのサイトを巡って見つけてきた方法。これは親がいくつに増えても対応できるようにJavaスクリプトが書かれている。なるほど!って感じです。(^^)
ドロップダウンのメニューそのものはdivで囲って、消してます。マウスが乗った時の変更は、CSSでつけてます。
HTML
<ul id="dropmenubar">
<li>
<a href="#" class="menu" id="menu1" onmouseover="menuopen(1);" onmouseout="menuclosetime();">親1</a>
<div class="submenu" id="submenu1"
onmouseover="cancelclose()"
onmouseout="menuclosetime();">
<a href="#">親1子1</a>
<a href="#">親1子2</a>
<a href="#">親1子3</a>
<a href="#">親1子4</a>
</div>
</li>
<li>
<a href="#" class="menu" id="menu2" onmouseover="menuopen(2);" onmouseout="menuclosetime();">親2</a>
<div class="submenu" id="submenu2"
onmouseover="cancelclose()"
onmouseout="menuclosetime();">
<a href="#">親2子1</a>
<a href="#">親2子2</a>
<a href="#">親2子3</a>
<a href="#">親2子4</a>
</div>
</li>
<li>
<a href="#" class="menu" id="menu3" onmouseover="menuopen(3);" onmouseout="menuclosetime();">親3</a>
<div class="submenu" id="submenu3"
onmouseover="cancelclose()"
onmouseout="menuclosetime();">
<a href="#">親3子1</a>
<a href="#">親3子2</a>
<a href="#">親3子3</a>
<a href="#">親3子4</a>
</div>
</li>
<li>
<a href="#" class="menu" id="menu4" onmouseover="menuopen(4);" onmouseout="menuclosetime();">親4</a>
<div class="submenu" id="submenu4"
onmouseover="cancelclose()"
onmouseout="menuclosetime();">
<a href="#">親4子1</a>
<a href="#">親4子2</a>
<a href="#">親4子3</a>
<a href="#">親4子4</a>
</div>
</li>
</ul>
CSS
#dropmenubar {margin:0; padding:0;}
#dropmenubar li {float:left; margin:0; padding:0; list-style: none;
font: bold 12px arial;}
#dropmenubar li a.menu {
display: block;
text-align: center;
background: #e0e0e0;
padding: 4px 10px;
margin: 0 1px 0 0;
color: #333333;
width: 100px;
text-decoration: none;
}
#dropmenubar li a.menu:hover {
background: #666666;
color: #f8f8f8;
}
.submenu {
background: #b8b8b8;
border: 1px solid #333333;
visibility: hidden;
position: absolute;
z-index: 3;
}
.submenu a {
display: block;
font: 12px arial;
text-align: left;
text-decoration: none;
padding: 5px;
color: #333333;
}
.submenu a:hover {
background: #666666;
color: #ffffff;
}
JS
/* dropdown */
var TimeOut = 100;
var currentLayer = null;
var currentitem = null;
var currentLayerNum = 0;
var noClose = 0;
var closeTimer = null;
function menuopen(n) {
var sub = document.getElementById("submenu" + n);
var main = document.getElementById("menu" + n);
if(sub) {
cancelclose();
sub.style.visibility='visible';
if(currentLayer && (currentLayerNum != n))
currentLayer.style.visibility='hidden';
currentLayer = sub;
currentitem = main;
currentLayerNum = n;
} else if(currentLayer) {
currentLayer.style.visibility='hidden';
currentLayerNum = 0;
currentitem = null;
currentLayer = null;
}
}
function menuclosetime() {
closeTimer = window.setTimeout(menuclose, TimeOut);
}
function cancelclose() {
if(closeTimer) {
window.clearTimeout(closeTimer);
closeTimer = null;
}
}
function menuclose() {
if(currentLayer && noClose!=1) {
currentLayer.style.visibility='hidden';
currentLayerNum = 0;
currentLayer = null;
currentitem = null;
} else {
noClose = 0;
}
currentLayer = null;
currentitem = null;
}
document.onclick = menuclose;