简体   繁体   English

手风琴菜单-活动状态

[英]Accordion menu - active state

I've lately managed to make my accordion menu. 我最近设法制作了手风琴菜单。 I did everything besides this one thing I'm looking for help. 我在寻求帮助的同时做了所有事情。

This is my accordion menu: 这是我的手风琴菜单:

HTML 的HTML

<div class="sidebar-wrapper">
    <ul class="main_nav">
       <li><a href='#'>MAIN 1</a>
          <ul class="sub-menu">
             <li><a href='#'>SUB MENU</a>
                <ul class="sub-menu">
                   <li><a href='#'>SUB-SUB MENU</a></li>
                   <li><a href='#'>SUB-SUB MENU</a></li>
                   <li><a href='#'>SUB-SUB MENU</a></li>
                   <li><a href='#'>SUB-SUB MENU</a></li>
                   <li><a href='#'>SUB-SUB MENU</a></li>
                   <li><a href='#'>SUB-SUB MENU</a></li>
                </ul>
             </li>
             <li><a href='#'>SUB MENU</a>
                <ul class="sub-menu">
                   <li><a href='#'>SUB-SUB MENU</a></li>
                </ul>
             </li>
             <li><a href='#'>SUB MENU</a>
                <ul class="sub-menu">
                   <li><a href='#'>SUB-SUB MENU</a></li>
                </ul>
             </li>
             <li><a href='#'>SUB MENU</a>
               <ul class="sub-sub-menu">
                   <li><a href='#'>SUB-SUB MENU</a></li>
                </ul>
             </li>
             <li><a href='#'>SUB MENU</a>
                <ul class="sub-menu">
                   <li><a href='#'>SUB-SUB MENU</a></li>
                </ul>
             </li>
          </ul>
       </li>
       <li><a href='#'>MAIN 2</a></li>
    </ul>
    </div>

CSS 的CSS

.sidebar-wrapper {
        width: 250px;
        margin-top: 30px;
    }

    .main_nav {
        width: 250px;
        list-style: none;
        padding: 40px 30px 25px 0;
        font-family: Arial;
    }

    ul.main_nav {
        padding: 0;
        margin: 0;
        list-style-type: none;
    }

    ul.main_nav li {
        list-style-type: none;
    }

    ul.main_nav li a {
        background-image: url('../images/acmenu_bg.png');
        background-repeat: repeat-x;
        line-height: 10px;
        padding: 13px 10px;
        display: block;
        text-decoration: none;
        font-size: 13px;
        color: #fff;
        font-weight: bold;
        list-style: none;
    }

    ul.main_nav li a:hover {
        /* background-image: url('');  HOVER ?!*/
        color: #ef7b0b;
    }

    ul.main_nav ul {
        margin: 0;
        padding: 0;
        display: none;
    }

    ul.main_nav ul li {
        margin: 0;
        padding: 0;
        clear: both;
    }

    ul.main_nav ul li a {
        background-image: url('../images/acmenu2_bg.png');
        background-repeat: repeat-x;
        padding-left: 20px;
        font-size: 12px;
        font-weight: bold;
    }

    ul.main_nav ul li a:hover {
        color: #dcdcdc;
        /* HOVER */
    }

    ul.main_nav ul li a:active {
        background-image: url('../images/acmenu1_bg.png');
        background-repeat: repeat-x;
    }

    ul.main_nav ul ul li a {
        background: #f6f6f6;
        color: #000;
        padding-left: 40px;
        border-bottom: 1px solid #e7e7e7;
    }

    ul.main_nav ul ul li a:hover {
        color: #ef7b0b;
        text-decoration: underline;
    }

JS JS

$(document).ready(function() {
$('.sidebar-wrapper ul li a').click(function(ev) {
    $('.sidebar-wrapper .sub-menu').not($(this).parents('.sub-menu')).slideUp();
    $(this).next('.sub-menu').slideToggle();
    $('.main_nav ul li a').removeClass('active');
    $(this).addClass('active');
    ev.stopPropagation();
});
});

My accordion menu example jsFiddle 我的手风琴菜单示例jsFiddle

As you can see I've tried to write the code as simple as possible. 如您所见,我试图编写尽可能简单的代码。 There are 2 things I can't handle with: 我无法处理两件事:

1st. 1号 ) I made a hover background to my sub-menus (only) - when It's clicked sub-sub menu list is showing - I would like to have only sub-menu items to be hovered (with that orange gradient), not sub-sub menu items, because when you click on sub-sub menu item it takes active state from sub-menu item, remove it and assign for yourself. )我为子菜单(仅)制作了一个悬停背景-当单击它时,子菜单列表显示-我只希望将子菜单项悬停(带有该橙色渐变),而不是子菜单菜单项,因为当您单击子菜单项时,它会从子菜单项进入活动状态,因此请删除它并自行分配。 I have a problem fixing that. 我在解决该问题。 ?

2nd. 2号 ) It's related to sub sub menu items. )与子子菜单项有关。 I would like to have sub-menu item active (covered with orange gradient background) when I have active sub sub menu item clicked (which is orange underline). 当我单击活动的子子菜单项(橙色下划线)时,我希望激活子菜单项(以橙色渐变背景覆盖)。 One more thing, I'd like it to be always collapsed if sub sub menu item is active. 还有一件事,如果子子菜单项处于活动状态,我希望它总是折叠起来。

If something is unclear to you or I wrote something wrong please correct me and do not hesitate to ask for more details. 如果您不清楚某些地方或我写错了什么,请纠正我,不要犹豫,索取更多详细信息。

I would really appreciate for your help. 非常感谢您的帮助。

Thank you. 谢谢。 Greetings - Chris 问候-克里斯

While I definitely applaud the abstraction of your Javascript, which is almost always considered a benefit and a proper coding practice, it appears as though you may be sacrificing control of the elements themselves; 尽管我绝对赞扬Javascript的抽象,这几乎总是被认为是一种好处,并且是一种适当的编码实践,但似乎您似乎在牺牲对元素本身的控制; this is most likely due to the fact that each of your menus (sub-menu, sub-sub-menu) share the same class ("sub-menu"). 这很可能是由于您的每个菜单(子菜单,子菜单)共享相同的类(“子菜单”)。

In order to gain greater control over your Javascript, it might be worth specifying distinct class names for each of the menu elements: 为了更好地控制Javascript,可能值得为每个菜单元素指定不同的类名称:

Sub-Menu (class: sub-menu) 子菜单(类:子菜单)

<ul class="sub-menu">
    <li><a href='#'>SUB-SUB MENU</a></li>
    <li><a href='#'>SUB-SUB MENU</a></li>
    <li><a href='#'>SUB-SUB MENU</a></li>
    <li><a href='#'>SUB-SUB MENU</a></li>
    <li><a href='#'>SUB-SUB MENU</a></li>
    <li><a href='#'>SUB-SUB MENU</a></li>
</ul>

Sub-Sub-Menu (class: sub-menu) 子子菜单(类:子菜单)

<ul class="sub-menu">
    <li><a href='#'>SUB-SUB MENU</a></li>
</ul>

By specifying distinct class names, you can determine what to do/not do when a certain element is accessed in the DOM, that is: 通过指定不同的类名称,可以确定在DOM中访问某个元素时该做什么/不做什么,即:

<ul class="sub-sub-menu">
    <li><a href='#'>SUB-SUB MENU</a></li>
</ul>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM