お世話になっております。
当方Laravel5.5にてWebSiteを構築しております、
環境はmac OS Mojave10.14.2
ブラウザはGoogle Chrome バージョン: 71.0.3578.98になります。
前提
- 現在構築しているサイト上には、
ビジネス向けのデータ(ファイルやテキスト文など)が多数あり、
それぞれがカテゴリ分けされています。
- カテゴリは5階層に分かれています。
- カテゴリはデータベースに入っており、変更の想定があります。
(保守の際にカテゴリが変更できない仕様だとまずいです)
やりたいこと
- サイトのトップページ左側(サイドバー部分)にて、
下記ヤフオクのサイトの左側「カテゴリから探す」の
下の「コンピュータ」や「家電、AV、カメラ」に
マウスオーバーした時のように、
カテゴリを右にどんどん出していく仕様にしたいです。
https://auctions.yahoo.co.jp/
- ヤフオクでは2階層しかカテゴリがないですが、
2階層目のカテゴリが出たあと、2階層目のカテゴリを
マウスオーバーするとさらにそれに応じた3階層目のカテゴリが
出現するように繰り返し、5階層目まで実装したいです。
(ヤフオクで例えると、「コンピュータ」をマウスオーバー(2階層目が出現)
→「パソコン」をマウスオーバー(3階層目が出現)→・・・といった形です)
質問
上記やりたいことを実装する上で、
役に立ちそうなjqueryやドロップダウンがありましたら、
ご教示いただけないでしょうか。
※尚、カテゴリを選択して、次の階層のカテゴリ一覧を右側に
表示する際、マウスオーバーでページ遷移しない非同期の仕様が
希望ですが、その目的はユーザビリティを上げるため、です。
もしユーザビリティを担保できるのであれば、
是非他の方法に関してヒントも頂けますと非常に助かります
考えたこと
上記やりたいことを実現するには、以下2点が必要と考えています。
0. マウスオーバーを発火点としてマウス
オーバーしたカテゴリの次の階層一覧を
データベースから取得する機能(jqueryが必要?)
0. 1に合わせて階層数を動的に設定するサイドバーの
右ドロップダウンメニュー
(jqueryが必要?)
試したこと・現状
下記ワードで検索しましたが、なかなか思う通りのものが見つかりません。
<検索したワード>
jquery プラグイン(plugin) メガメニュー(mega menu) right dropdown
サイドバー(sidebar) 階層(hierarchy) ツリー(tree)
カテゴリを選ぶたびにページを遷移させる仕様であればjqueryは
いらないかと存じますが、できればページを遷移させたくないので、
jqueryの知識がない状態からゼロベースで実装するのはかなり難しそうです。
一旦、静的に右ドロップダウンメニューを表示させる
機能までは実装してみました。
view
php
1 2<div class="sidebar border"> 3 <nav class="sidebar-menu" role="navigation"> 4 <ul> 5 <li class="bg-deepblue">資料を検索</li> 6 <div class="d-block my-1"> 7 <div class="dropright_top"> 8 <a href="#" class="dropright-toggle" data-toggle="dropdown">Menu 1 <b class="caret"></b></a> 9 <ul class="dropdown-menu multi-level"> 10 <li><a href="#">Default</a></li> 11 <li class="dropdown-submenu"> 12 <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a> 13 <ul class="dropdown-menu"> 14 <li><a href="#">sub menu1</a></li> 15 <li class="dropdown-submenu"> 16 <a href="#" class="dropdown-toggle" data-toggle="dropdown">sub menu1</a> 17 <ul class="dropdown-menu"> 18 <li class="dropdown-submenu"> 19 <a href="#" class="dropdown-toggle" data-toggle="dropdown">sub menu2</a> 20 <ul class="dropdown-menu"> 21 <li><a href="#">sub menu3</a></li> 22 <li><a href="#">sub menu3</a></li> 23 <li><a href="#">sub menu3</a></li> 24 </ul> 25 </li> 26 </ul> 27 </li> 28 </ul> 29 </li> 30 </ul> 31 </div> 32 </div> 33 </ul> 34</nav> 35</div>
css
php
1.sidebar-menu ul { 2 text-align: left; 3 margin: 0; 4 padding: 0; 5} 6 7.sidebar-menu ul li { 8 color:white; 9 list-style: none; 10 text-decoration: none; 11 text-transform: uppercase; 12 font-size: 0.5rem; 13 font-weight: 600; 14 position: relative; 15 padding: 7px 7px; 16 white-space: nowrap; 17} 18 19 20.dropright_top .dropdown-menu { 21 top: 0; 22 right: auto; 23 left: 100%; 24 margin-top: 0; 25 margin-left: 0.125rem; 26} 27 28.dropright_top .dropdown-toggle::after { 29 display: inline-block; 30 width: 0; 31 height: 0; 32 margin-left: 0.255em; 33 vertical-align: 0.255em; 34 content: ""; 35 border-top: 0.3em solid transparent; 36 border-right: 0; 37 border-bottom: 0.3em solid transparent; 38 border-left: 0.3em solid; 39} 40 41.dropright_top .dropdown-toggle:empty::after { 42 margin-left: 0; 43} 44 45.dropright_top .dropdown-toggle::after { 46 vertical-align: 0; 47} 48 49 50 51.dropdown-submenu { 52 position: relative; 53} 54 55.dropdown-submenu>.dropdown-menu { 56 top: 0; 57 left: 100%; 58 margin-top: -6px; 59 margin-left: -1px; 60 -webkit-border-radius: 0 6px 6px 6px; 61 -moz-border-radius: 0 6px 6px; 62 border-radius: 0 6px 6px 6px; 63} 64 65.dropdown-submenu:hover>.dropdown-menu { 66 display: block; 67} 68 69.dropdown-submenu>a:after { 70 display: block; 71 content: " "; 72 float: right; 73 width: 0; 74 height: 0; 75 border-color: transparent; 76 border-style: solid; 77 border-width: 5px 0 5px 5px; 78 border-left-color: #ccc; 79 margin-top: 5px; 80 margin-right: -10px; 81} 82 83.dropdown-submenu:hover>a:after { 84 border-left-color: #fff; 85} 86 87.dropdown-submenu.pull-left { 88 float: none; 89} 90 91.dropdown-submenu.pull-left>.dropdown-menu { 92 left: -100%; 93 margin-left: 10px; 94 -webkit-border-radius: 6px 0 6px 6px; 95 -moz-border-radius: 6px 0 6px 6px; 96 border-radius: 6px 0 6px 6px; 97} 98 99
宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー