jQuery UI の Accordion プラグインで、2階層の上下開閉式アコーディオン型メニューを簡単に作る方法。ドラッグ&ドロップで、メニューの順番を入れ替えられるタイプ。順番の入れ替えには、jQuery UI の Sortable プラグインを使っている。
アイコンについては、jQuery UI の Accordion プラグインによるアコーディオンメニュー [4]と同様に、フォルダアイコンを指定している。開いているメニューのアイコンは、開いた状態のフォルダ・アイコンを表示。閉じているメニューのアイコンは、閉じた状態のフォルダ・アイコンを表示する。
jQuery UI の CSS テーマは、jQuery UI の Accordion プラグインによるアコーディオンメニュー [6]と同様に、「sunny」を採用。
実装例
メニュー 3
もちろん、リストタグ以外も使える。
2階層の上下開閉式アコーディオン型パネルとしても使える。
実装例の動作について
- ドラッグ&ドロップにより、「メニュー 1」「メニュー 2」「メニュー 3」の順番を入れ替えることができる。例えば、「メニュー 1」をドラッグし、「メニュー 2」の下へドロップすると、「メニュー 2」「メニュー 1」「メニュー 3」の順番になる。
- 「メニュー 1」「メニュー 2」「メニュー 3」をクリックすると、そのメニューを開き、それ以外のメニューを閉じる。メニューを開くと、フォルダ・アイコンも開く。メニューを閉じると、フォルダ・アイコンも閉じる。
実装例のソースコード
読み込み
読み込み方は、2種類ある。パスは、それぞれ、アップロードした場所を指定する。
まとめて読み込む場合
<link rel="stylesheet" href="themes/sunny/jquery-ui-1.8.12.custom.css">
<script type="text/javascript" src="jquery-1.4.2.js"></script>
<script type="text/javascript" src="ui/jquery-ui-1.8.12.custom.min.js"></script>
<script type="text/javascript" src="jquery-1.4.2.js"></script>
<script type="text/javascript" src="ui/jquery-ui-1.8.12.custom.min.js"></script>
個別に読み込む場合
<link rel="stylesheet" href="themes/sunny/jquery-ui-1.8.12.custom.css">
<script type="text/javascript" src="jquery-1.4.2.js"></script>
<script type="text/javascript" src="ui/jquery.ui.core.js"></script>
<script type="text/javascript" src="ui/jquery.ui.widget.js"></script>
<script type="text/javascript" src="ui/jquery.ui.mouse.js"></script>
<script type="text/javascript" src="ui/jquery.ui.sortable.js"></script>
<script type="text/javascript" src="ui/jquery.ui.accordion.js"></script>
<script type="text/javascript" src="jquery-1.4.2.js"></script>
<script type="text/javascript" src="ui/jquery.ui.core.js"></script>
<script type="text/javascript" src="ui/jquery.ui.widget.js"></script>
<script type="text/javascript" src="ui/jquery.ui.mouse.js"></script>
<script type="text/javascript" src="ui/jquery.ui.sortable.js"></script>
<script type="text/javascript" src="ui/jquery.ui.accordion.js"></script>
JavaScript
<script type="text/javascript">
<!--
$ ( function () {
var stop = false;
$ ( '.jquery-ui-accordion-title' )
. click ( function ( event ){
if ( stop ) {
event . stopImmediatePropagation ();
event . preventDefault ();
stop = false;
}
} ) ;
$ ( '#jquery-ui-accordion' )
. accordion ( {
icons: {
'header': 'ui-icon-folder-collapsed',
'headerSelected': 'ui-icon-folder-open'
},
header: '.jquery-ui-accordion-title'
} )
. sortable ( {
axis: 'y',
handle: '.jquery-ui-accordion-title',
stop: function () {
stop = true;
}
} ) ;
} ) ;
// -->
</script>
<!--
$ ( function () {
var stop = false;
$ ( '.jquery-ui-accordion-title' )
. click ( function ( event ){
if ( stop ) {
event . stopImmediatePropagation ();
event . preventDefault ();
stop = false;
}
} ) ;
$ ( '#jquery-ui-accordion' )
. accordion ( {
icons: {
'header': 'ui-icon-folder-collapsed',
'headerSelected': 'ui-icon-folder-open'
},
header: '.jquery-ui-accordion-title'
} )
. sortable ( {
axis: 'y',
handle: '.jquery-ui-accordion-title',
stop: function () {
stop = true;
}
} ) ;
} ) ;
// -->
</script>
CSS
<style type="text/css">
<!--
div#jquery-ui-accordion div.jquery-ui-accordion-title{
margin: 1px 0 0 0;
padding: 0.7em 0.5em 0.5em 2em;
font-size: 16px;
font-weight: bold;
}
div#jquery-ui-accordion div.jquery-ui-accordion-contents{
margin: -2px 0 2px 0;
padding: 0.5em 2em 1.5em 2em;
font-size: 15px;
}
-->
</style>
<!--
div#jquery-ui-accordion div.jquery-ui-accordion-title{
margin: 1px 0 0 0;
padding: 0.7em 0.5em 0.5em 2em;
font-size: 16px;
font-weight: bold;
}
div#jquery-ui-accordion div.jquery-ui-accordion-contents{
margin: -2px 0 2px 0;
padding: 0.5em 2em 1.5em 2em;
font-size: 15px;
}
-->
</style>
HTML
<div id="jquery-ui-accordion">
<div>
<div class="jquery-ui-accordion-title">メニュー 1</div>
<div class="jquery-ui-accordion-contents">
<ul>
<li><a href="#">メニュー 1-1</a></li>
<li><a href="#">メニュー 1-2</a></li>
<li><a href="#">メニュー 1-3</a></li>
</ul>
</div>
</div>
<div>
<div class="jquery-ui-accordion-title">メニュー 2</div>
<div class="jquery-ui-accordion-contents">
<ul>
<li><a href="#">メニュー 2-1</a></li>
<li><a href="#">メニュー 2-2</a></li>
<li><a href="#">メニュー 2-3</a></li>
<li><a href="#">メニュー 2-4</a></li>
<li><a href="#">メニュー 2-5</a></li>
</ul>
</div>
</div>
<div>
<div class="jquery-ui-accordion-title">メニュー 3</div>
<div class="jquery-ui-accordion-contents">
<p>もちろん、リストタグ以外も使える。</p>
<p>2階層の上下開閉式アコーディオン型パネルとしても使える。</p>
</div>
</div>
</div>
<div>
<div class="jquery-ui-accordion-title">メニュー 1</div>
<div class="jquery-ui-accordion-contents">
<ul>
<li><a href="#">メニュー 1-1</a></li>
<li><a href="#">メニュー 1-2</a></li>
<li><a href="#">メニュー 1-3</a></li>
</ul>
</div>
</div>
<div>
<div class="jquery-ui-accordion-title">メニュー 2</div>
<div class="jquery-ui-accordion-contents">
<ul>
<li><a href="#">メニュー 2-1</a></li>
<li><a href="#">メニュー 2-2</a></li>
<li><a href="#">メニュー 2-3</a></li>
<li><a href="#">メニュー 2-4</a></li>
<li><a href="#">メニュー 2-5</a></li>
</ul>
</div>
</div>
<div>
<div class="jquery-ui-accordion-title">メニュー 3</div>
<div class="jquery-ui-accordion-contents">
<p>もちろん、リストタグ以外も使える。</p>
<p>2階層の上下開閉式アコーディオン型パネルとしても使える。</p>
</div>
</div>
</div>