簡體   English   中英

使用 JS/jquery 的多級側邊欄菜單

[英]Multilevel sidebar menu using JS/jquery

對於深度為 3 的多級菜單,我需要一個響應式側邊欄導航(作為使網站響應的一部分)。 html 標記如下,

<nav>
    <div data-level="1">
        <ul>
            <li class="main-menu">
                Level1
                <div data-level="2">
                    <ul>
                        <li class="submodule">
                            example1.1
                            <div data-level="3">
                                <ul>
                                    <li>example1.1.1</li>
                                    <li>example1.1.2</li>
                                    <li>example1.1.3</li>
                                </ul>
                            </div>
                        </li>
                        <li class="submodule">
                            example1.2
                            <div data-level="2">
                                <ul>
                                    <li>example1.2.1</li>
                                    <li>example1.2.2</li>
                                    <li>example1.2.3</li>
                                </ul>
                            </div>
                        </li>
                        <li class="submodule">
                            example1.3
                            <div data-level="2">
                                <ul>
                                    <li>example1.3.1</li>
                                    <li>example1.3.2</li>
                                    <li>example1.3.3</li>
                                </ul>
                            </div>
                        </li>
                    </ul>
                </div>
            </li>
            <li>
                Level2
                <div data-level="2">
                    <ul>
                        <li>
                            example2.1
                            <div data-level="3">
                                <ul>
                                    <li>example2.1.2</li>
                                    <li>example2.1.3</li>
                                    <li>example2.1.4</li>
                                </ul>
                            </div>
                        </li>
                        <li>
                            example2.2
                            <div data-level="2">
                                <ul>
                                    <li>example2.2.1</li>
                                    <li>example2.2.2</li>
                                    <li>example2.2.3</li>
                                </ul>
                            </div>
                        </li>
                        <li>
                            example2.3
                            <div data-level="2">
                                <ul>
                                    <li>example2.3.1</li>
                                    <li>example2.3.2</li>
                                    <li>example2.3.4</li>
                                </ul>
                            </div>
                        </li>
                    </ul>
                </div>
            </li>           
        </ul>
    </div>
</nav>

在第一個菜單只顯示頂層,

1級
2級

單擊 Level1 時應顯示菜單,

返回主菜單
示例 1.1
示例 1.2

單擊 example1.1 時,

返回子級
例子1.1.1
示例1.1.2
示例1.1.3

每個后退按鈕都進入之前的菜單。

如何使用 JS/jQuery 進行導航?

有必要稍微調整一下導航 - 2 級的導航缺少submodule class。 此外,您可以考慮調整<div data-level="3">的使用,因為您僅將其用於第二和第三子級別導航,而第一子級別位於<div data-level="2">中。 以下導航在未完成時滿足您的要求 - 您可以對其進行調整,以便在單擊主導航時切換可見的子級導航。 我已經注意到這個問題,只有一個主導航和子模塊導航同時可見。

 $(".main-menu").on("click", function() { if ($(".main-menu").not(this).find(".submodule").is(":visible")) { $(".main-menu").not(this).find(" > div[data-level='2'], .submodule").hide(); } $(this).find(" > div[data-level='2'], .submodule").toggle(); }); $(".submodule").on("click", function(e) { e.stopPropagation(); $(".submodule").not(this).each(function() { if ($(this).find(" > div[data-level='3'], > div[data-level='2']").is(":visible")) { $(this).find(" > div[data-level='3'], > div[data-level='2']").hide(); } }); $(this).find(" > div[data-level='3'], > div[data-level='2']").toggle(); }); $(".submodule.back").on("click", function(e) { e.stopPropagation(); $(this).closest(".main-menu").find(" > div[data-level='2'], .submodule").hide();; }); $(".back").not(".submodule").on("click", function(e) { e.stopPropagation(); $(this).closest(".submodule").find(" > div[data-level='3'], > div[data-level='2']").hide(); });
 div[data-level ="2"]{ display:none; } div[data-level ="3"]{ display:none; }.submodule { display:none; }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <nav> <div data-level="1"> <ul> <li class="main-menu"> Level1 <div data-level="2"> <ul> <li class="submodule back"> Back to main menu </li> <li class="submodule"> example1.1 <div data-level="3"> <ul> <li class="back">Back to sublevel</li> <li>example1.1.1</li> <li>example1.1.2</li> <li>example1.1.3</li> </ul> </div> </li> <li class="submodule"> example1.2 <div data-level="2"> <ul> <li class="back">Back to sublevel</li> <li>example1.2.1</li> <li>example1.2.2</li> <li>example1.2.3</li> </ul> </div> </li> <li class="submodule"> example1.3 <div data-level="2"> <ul> <li class="back">Back to sublevel</li> <li>example1.3.1</li> <li>example1.3.2</li> <li>example1.3.3</li> </ul> </div> </li> </ul> </div> </li> <li class="main-menu"> Level2 <div data-level="2"> <ul> <li class="submodule back"> Back to main menu </li> <li class="submodule"> example2.1 <div data-level="3"> <ul> <li class="back">Back to sublevel</li> <li>example2.1.2</li> <li>example2.1.3</li> <li>example2.1.4</li> </ul> </div> </li> <li class="submodule"> example2.2 <div data-level="2"> <ul> <li class="back">Back to sublevel</li> <li>example2.2.1</li> <li>example2.2.2</li> <li>example2.2.3</li> </ul> </div> </li> <li class="submodule"> example2.3 <div data-level="2"> <ul> <li class="back">Back to sublevel</li> <li>example2.3.1</li> <li>example2.3.2</li> <li>example2.3.4</li> </ul> </div> </li> </ul> </div> </li> </ul> </div> </nav>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM