[JavaScript]JavaScriptで作るメニュー
ちょっと前回の更新から時間が空いてしまいましたが今回は、JavaScriptでプルダウン形のメニューを作成します。
一番簡単なのは、最初にサブメニューの部分に「display:none;」を指定して隠していおいて、マウスのクリックイベントなどでメニュー部分を表示するタイプで
という風になります。
もう少し高度になるとNiftyのトップページでも行っていますが、メニューの部分にマウスカーソルを持っていくと新たなメニューが表示されてそこから新しい選択肢を選択できるというものです。実際にデモしてみると
という感じになります。
こちらは、マウスがメニューの上に来たときにonmouseoverイベントでメニューを表示して、onmouseoutイベントでタイマーを発生させてある程度の時間メニューからマウスが離れていたらメニューを消すような処理を行っています。
中身を見ていくと
<div id="sample2" class="submenu" style="display:none;" onmouseover="onmousemenu( 'sample2' );" onmouseout="hiddenmenu( 'sample2' );">
<div class="menuitem"><a class="menuitem" href="" onclick="closeMenu( 'sample2' );return false;">サブメニュー1</a></div>
<div class="menuitem"><a class="menuitem" href="" onclick="closeMenu( 'sample2' );return false;">サブメニュー2</a></div>
<div class="menuitem"><a class="menuitem" href="" onclick="closeMenu( 'sample2' );return false;">サブメニュー3</a></div>
<div class="menuitem"><a class="menuitem" href="" onclick="closeMenu( 'sample2' );return false;">サブメニュー4</a></div>
<div class="menuitem"><a class="menuitem" href="" onclick="closeMenu( 'sample2' );return false;">サブメニュー5</a></div>
</div>
.topmenu {
border:solid 1px gray;
}
.submenu {
width: 10em;
background-color:white;
border:solid 1px gray;
position: absolute;
z-index:1000;
}
.menuitem {
width:100%;
white-space:nowrap;
border-bottom:solid 1px gray;
margin:0;
}
a.menuitem:link{
text-decoration:none;
}
a.menuitem:visited{
text-decoration:none;
}
a.menuitem:hover{
text-decoration:none;
background-color:lightcyan;
}
a.menuitem:active{
text-decoration:none;
background-color:lightcyan;
}
var timer_id = null;
function showmenu( parent, id )
{
var target = document.getElementById( id );
var top = 0;
var left = 0;
var obj = parent.offsetParent;
for( ;; )
{
if( ! obj )
break;
top += obj.offsetTop;
left += obj.offsetLeft;
obj = obj.offsetParent;
}
target.style.top = top + parent.offsetTop;
target.style.left = left + parent.offsetLeft + parent.offsetWidth;
target.style.display = '';
if( timer_id )
{
clearTimeout( timer_id );
timer_id = null;
}
}
function onmousemenu()
{
if( timer_id )
{
clearTimeout( timer_id );
timer_id = null;
}
}
function hiddenmenu(id)
{
timer_id = setTimeout( "closeMenu('"+id+"')", 400 );
}
function closeMenu(id)
{
var submenu = document.getElementById( id );
submenu.style.display = 'none';
timer_id = null;
}
となっています。
注意点ですが、setTimeout関数で別の関数を呼び出すときに単純にsetTimeout( "closeMenu("+id+")", 400 )とすると文字列を渡していたidが受け取り側のcloseMenuでは、オブジェクトととして渡されてくるのでうまく動きません。そのためsetTimeout( "closeMenu('"+id+"')", 400 )という風にidを「'(シングルクォート)」でくくる必要があります。
前回と同様に1つにまとめたサンプルになります。
| 固定リンク | コメント (0) | トラックバック (0)





最近のコメント