JavaScript小技集開閉式メニュー
開閉式ツリー型メニュー
unknown
JavaScriptを使用した開閉式のツリー型メニューです。好きなだけ階層を増やせます。
子メニューを非表示(display:none)にしておき、親テキストがクリックされた時に子メニューを表示(disabled:block)させます。 アイコンは、リストが開いている場合に「+」、閉じている場合に「-」に変わります。 子メニューを閉じる場合は、再度、親テキストをクリックします。
サンプルを見る<style type="text/css">
ul#NodeMenu {
margin:0; padding:0;
width:250px;
list-style:none;
}
ul#NodeMenu li {
margin:5px 0; padding:0;
list-style:none;
}
ul#NodeMenu a {
text-decoration:none;
color:navy;
display:block;
padding:2px 0;
}
ul#NodeMenu a:hover {
color:orange;
}
ul#NodeMenu span.parent { /* 親テキスト */
color:navy; font-weight:bold;
background-color:#eeeeee;
}
ul#NodeMenu div.child { /* 子メニュー */
background-color:#ffffcc;
}
ul#NodeMenu div.indent {
margin-left:1em;
}
</style>
<script type="text/javascript">
/* ブラウザ判別 */
var ie=document.all ? 1 : 0;
var ns6=document.getElementById&&!document.all ? 1 : 0;
var opera=window.opera ? 1 : 0;
/* 子メニューの表示・非表示切替 */
function openFolder(childObj, parentObj){
var child="";
var parent="";
var sw="/content/img/js/show.gif"; /* フォルダ表示時のアイコン画像 */
var hd="/content/img/js/hide.gif"; /* フォルダ非表示時のアイコン画像 */
if(ie || ns6 || opera){
child=ns6 ? document.getElementById(childObj).style : document.all(childObj).style;
parent=ns6 ? document.getElementById(parentObj) : document.all(parentObj);
if (child.display=="none"){
child.display="block";
parent.src=sw;
}else{
child.display="none";
parent.src=hd;
}
}
}
</script>
<ul id="NodeMenu">
<!-- 2階層[A] Begin -->
<li>
<img id="close_1" src="/content/img/js/hide.gif" onclick="openFolder('open_1', 'close_1')" alt="" />
<span class="parent" onclick="openFolder('open_1', 'close_1')">ctgA(2階層)</span>
</li>
<li>
<div class="indent">
<div id="open_1" class="child" style="display:none;">
<!-- [A-1] Begin -->
<ul>
<li><a href="#">・ctgA-1</a></li>
<li>
<img id="close_1_1" src="/content/img/js/hide.gif" onclick="openFolder('open_1_1', 'close_1_1')" alt="" />
<span class="parent" onclick="openFolder('open_1_1', 'close_1_1')">ctgA-2</span>
</li>
<li>
<div class="indent">
<div id="open_1_1" class="child" style="display:none;">
<ul>
<li><a href="#">・ctgA-2-1</a></li>
<li><a href="#">・ctgA-2-2</a></li>
</ul>
</div>
</div>
</li>
</ul>
<!-- node[A-1] End // -->
</div>
</div>
</li>
<!-- 2階層[A] End // -->
<!-- 3階層[B] Begin -->
<li>
<img id="close_2" src="/content/img/js/hide.gif" onclick="openFolder('open_2', 'close_2')" alt="" />
<span class="parent" onclick="openFolder('open_2', 'close_2')">ctgB(3階層)</span>
</li>
<li>
<div class="indent">
<div id="open_2" class="child" style="display:none;">
<!-- [B] Begin -->
<ul>
<li>
<a href="#">・ctgB-1</a>
<!-- [B-2] Begin -->
<ul>
<li>
<img id="close_2a" src="/content/img/js/hide.gif" onclick="openFolder('open_2a', 'close_2a')" alt="" />
<span class="parent" onclick="openFolder('open_2a', 'close_2a')">ctgB-2</span>
</li>
<li>
<div class="indent">
<div id="open_2a" class="child" style="display:none;">
<!-- [B-2-1] Begin -->
<ul>
<li><a href="#">・ctgB-2-1</a></li>
<li>
<img id="close_2aa" src="/content/img/js/hide.gif" onclick="openFolder('open_2aa', 'close_2aa')" alt="" />
<span class="parent" onclick="openFolder('open_2aa', 'close_2aa')">ctgB-2-2</span>
</li>
<li>
<div class="indent">
<div id="open_2aa" class="child" style="display:none;">
<ul>
<li><a href="#">・ctgB-2-2-1</a></li>
<li><a href="#">・ctgB-2-2-2</a></li>
</ul>
</div>
</div>
</li>
<li><a href="#">・ctgB-2-3</a></li>
</ul>
<!-- [B-2-1] End // -->
</div>
</div>
</li>
</ul>
<!-- [B-2] End // -->
</li>
</ul>
</div>
</div>
</li>
<!-- 3階層[Bs] End // -->
</ul>
-
ctgA(2階層)
-
-
ctgB(3階層)
-
開閉式ツリー型メニュー(ロールオーバーあり)
unknown
サンプルを見る<style type="text/css">
/* メニュー全体 */
div#menuA, div#menuA * { margin:0; padding:0; }
div#menuA { margin:20px; width:210px; }
div#menuA dl { list-style:none; border-top:1px solid silver; width:100%; margin:0; padding:0; }
/* カテゴリ名 */
div#menuA dt { border-width:1px; border-style:none solid solid solid; border-color:silver; }
div#menuA dt a { padding:5px 0; display:block; color:black; text-decoration:none; background:#eee url(/content/img/js/arrowinbox.gif) no-repeat right center; width:100%; }
/* カテゴリメニュー */
div#menuA dd { border-width:1px; border-style:none solid solid solid; border-color:silver; }
div#menuA dd a { text-decoration:none; display:block; background:url(/content/img/js/arrow.gif) no-repeat left center; padding:2px 0 2px 10px; color:black; }
div#menuA dd a:hover { color:#fff; background:orange url(/content/img/js/arrow_wh.gif) no-repeat left center; }
div#menuA dd a.line, div#menuA dd a.line:hover { border-bottom:1px dotted silver; }
div#menuA dd a.end, div#menuA dd a.end:hover { padding-bottom:1px; }
/* ダイレクトリンク */
div#menuA dt.direct a { display:block; color:#000; background:#fff url(/content/img/js/arrow.gif) no-repeat right center; }
div#menuA dt.direct a:hover { color:#fff; background:orange url(/content/img/js/arrow_wh.gif) no-repeat right center; }
</style>
<script type="text/javascript">
/* ブラウザ判別 */
var ie=document.all ? 1 : 0;
var ns6=document.getElementById&&!document.all ? 1 : 0;
var opera=window.opera ? 1 : 0;
/* 子メニューの表示・非表示切替 */
function openchild(childObj, parentObj) {
var parent="";
var child="";
var sw="/content/img/js/arrowinbox_on.gif"; /* 子メニューが開いてる時のアイコン */
var hd="/content/img/js/arrowinbox.gif"; /* 子メニューが閉じている時のアイコン */
if (ie || ns6 || opera) {
child=ns6 ? document.getElementById(childObj).style : document.all(childObj).style;
parent=ns6 ? document.getElementById(parentObj).style : document.all(parentObj).style;
if (child.display=="none") {
child.display="block";
child.backgroundColor="white";
parent.backgroundColor="orange";
parent.color="white";
} else {
child.display="none";
parent.backgroundColor="#eeeeee";
parent.color="black";
}
}
}
</script>
<div id="menuA">
<dl>
<!-- menu1 -->
<dt>
<a href="javascript:void(0)" id="closer_1" onclick="openchild('opener_1', 'closer_1')"> カテゴリⅠ</a>
</dt>
<dd id="opener_1" style="display:none;">
<a href="javascript:void(0)" class="line">メニューⅰ</a>
<a href="#" class="line">メニューⅱ</a>
<a href="#" class="end">メニューⅲ</a>
</dd>
<!-- menu2 -->
<dt>
<a href="javascript:void(0)" id="closer_2" onclick="openchild('opener_2', 'closer_2')"> カテゴリⅡ</a>
</dt>
<dd id="opener_2" style="display:none;">
<a href="#" class="line">メニューⅰ</a>
<a href="#" class="line">メニューⅱ</a>
<a href="#" class="end">メニューⅲ</a>
</dd>
<!-- menu3 -->
<dt class="direct"><a href="#"> カテゴリⅢ</a>
<!-- 4 -->
<dt>
<a href="javascript:void(0)" id="closer_3" onclick="openchild('opener_3', 'closer_3')"> カテゴリⅣ</a>
</dt>
<dd id="opener_3" style="display:none;">
<a href="#" class="line">メニューⅰ</a>
<a href="#" class="line">メニューⅱ</a>
<a href="#" class="end">メニューⅲ</a>
</dd>
<!-- menu5 -->
<dt class="direct"><a href="#"> カテゴリⅤ</a>
<!-- menu6 -->
<dt class="direct"><a href="#"> カテゴリⅥ</a>
</dl>
</div>