
jQueryで多階層のナビゲーションメニューを実装する
今更感もありますが、まだまだクライアントワークで求められることも多いので備忘録をして残しておきたいと思います。タイトルの通りグローバルナビなどでメニューが多階層になった形のものを実装します。
特徴としてはリスト内で親子関係があったりと入れ子になっている状態になっています。項目をクリックしたりマウスカーソルを重ねると、その子要素に当たるリストが表示といった感じです。最近ではダッシュボードのメニューなどでもよく見かけます。
コードですが、まずはHTMLから見ていきます。今回はわかりやすいようにリスト要素を使用しています。li要素の中に子要素にあたるulを入れてネストの状態になっています。CSSは適宜スタイルに合わせて調整しますが、子要素と孫要素にあたるリストは非表示にしておきます。
【html】※一部抜粋
<ul class="parent">
<li>Menu 01
</li>
<li>Menu 02
<ul class="child">
<li>Menu 02-01
</li>
<li>Menu 02-02
<ul class="grandchild">
<li>Menu 02-02-01
</li>
<li>Menu 02-02-02
</li>
<li>Menu 02-02-03
</li>
</ul>
</li>
<li>Menu 02-03
</li>
</ul>
</li>
<li>Menu 03
</li>
</ul>
次にjQueryで動きをつけていきます。下記のコードはhoverのイベントで設定しています。実装自体は非常にシンプルで、hoverになっているli要素の子要素に当たるul要素を表示させている形になります。表示非表示にはslideDownやshowなどエフェクトに合わせた表示方法を採用するといいかと思います。階層が深くなっても同じ形で流用できるかと思います。
【javascript】
$(function(){
var parentList = $(".parent");
var parentListTrig = $(".parent > li");
var childList = $(".child");
var childListTrig = $(".child > li");
parentListTrig.hover(function(){
$(this).children('.child').slideDown('fast');
}, function() {
$(this).children('.child').slideUp('fast');
});
childListTrig.hover(function(){
$(this).children('.grandchild').show('fast');
}, function() {
$(this).children('.grandchild').hide('fast');
});
});
いかがでしょうか、サイトによってページや画面数が多いなどのケースでは表示方法に悩むケースもあるかと思いますがそのような場合に使えるかと思います。今回のサンプルはこちらに用意しておりますのでご参考に。categories
- WordPress(61)
- JavaScript(49)
- Vue.js(48)
- CSS(46)
- jQuery(34)
- Nuxt.js(22)
- Sass(21)
- Gulp(17)
- webpack(16)
- PHP(14)
- HTML(14)
- GSAP(11)
- React(10)
- Vite(9)
- Pug(9)
- Laravel(8)
- Cordova(8)
- Linux(7)
- Next.js(6)
- Apache(5)
- Shopify(4)
- REST API(4)
- Node.js(4)
- Smarty(3)
- Git(3)
- JSON(3)
- その他プログラミング(3)
- Google Apps API(3)
- Bootstrap(3)
- 環境構築・システム(3)
- TypeScript(2)
- EJS(2)
- RMS(2)
- Docker(2)
- Instagram API(2)
- Excel VBA(2)
- SVG(1)
- Dart(1)
- ECカートASP(1)
- Markdown(1)
- AMP(1)
- Nginx(1)
- XML(1)
- shellscript(1)
- Ruby(1)
- MySQL(1)