制作子菜单滑动关闭在正确的时间使用jQuery

问题描述:

请参见本小提琴作品链接http://jsfiddle.net/rabelais/ktn425c6/6/制作子菜单滑动关闭在正确的时间使用jQuery

var $menu = $('#menu'); 

$menu .click(function() { 
if ($('#igna-1').css('display') != 'none') { 
    $('#igna-1').slideToggle("fast", function() { 
     $('#igna-2').animate({ left: 'hide' }, 300, function() { 
      $('#black, #igna, #dazed, #sons, #mad, #stimp').slideUp("fast", function() { 
       $('#fatal').animate({ left: 'hide' }, 300); 
      }); 
     }); 
    }); 
} else if ($('#fatal').css('display') == 'none') { 
    $('#fatal').animate({ left: 'toggle' }, 300, function() { 
     $('#igna, #black, #dazed, #sons, #mad, #stimp').slideToggle("fast"); 
    }); 
} 

1.Clicking进一步打开链接。

2.点击DAZED打开一个子菜单。

3.当你再次点击WORK时,这两个菜单都会打开,两个菜单同时关闭(这在我的浏览器上发生,但由于某种原因不在这个小提琴上?您可以看到完整的站点here

我的问题:而不是他们关在一起我需要子菜单首先折叠,然后第一个菜单。这种影响对IGNA和MAD LONDON子菜单已经起作用。

请帮忙。谢谢。

+0

无论是网站或拨弄无论是在折叠每个菜单在这里的时间 – dippas

+0

这是当工作链接再次点击,子菜单打开我需要子菜单先滑入然后主菜单。 – angela

我会做你的菜单系统是这样的(HTML更改,因此它是一个比较语义正确与子链接嵌套):

$('#menu li').on('click', function(e) { 
 
    e.stopPropagation(); 
 
    var li = $(this), 
 
     subMenu = li.children('ul').eq(0); 
 
    
 
    li.addClass('clicked'); 
 
    
 
    if (subMenu.length) { 
 
     e.preventDefault(); 
 
     
 
     if (subMenu.is(':visible')) { 
 
      closeMenu(subMenu); 
 
     } else { 
 
      li.siblings().children().not(subMenu).children('li').not(':last-child').slideUp('fast', function() { 
 
       $(this).parent().animate({ left: 'hide' }, 300); 
 
      }); 
 
      
 
      subMenu.animate({ left: 'show' }, 300, function() { 
 
       subMenu.children('li').not(':last-child').slideDown('fast'); 
 
       console.log('open click removed'); 
 
       li.removeClass('clicked'); 
 
      }); 
 
     } 
 
    } 
 
}); 
 

 
function closeMenu(menu) { 
 
    var subMenu = menu.children('li').children('ul:visible').eq(0); 
 
    if (subMenu.length) { 
 
     closeMenu(subMenu); 
 
    } else { 
 
     var children = menu.children('li').not(':last-child'); 
 
     children.each(function(index) { 
 
      if (index == children.length - 1) { 
 
       var parentLi = menu.parent('li'); 
 
       $(this).slideUp('fast', function() { 
 
        menu.animate({ left: 'hide' }, 300, function() { 
 
         if (parentLi.length && !parentLi.hasClass('clicked')) { 
 
          console.log(parentLi.hasClass('clicked')); 
 
          closeMenu(parentLi.parent()); 
 
         } else { 
 
          parentLi.removeClass('clicked'); 
 
          console.log('close click removed'); 
 
         } 
 
        }); 
 
       }); 
 
      } else { 
 
       $(this).slideUp('fast'); 
 
      } 
 
     }); 
 
    } 
 
} 
 
     
#menu, #menu ul, #menu li { 
 
    list-style:none; 
 
    margin:0; 
 
    padding:0; 
 
} 
 
#menu, #menu ul { 
 
    display:inline-block; 
 
} 
 
#menu { 
 
    position:fixed; 
 
    bottom:34px; 
 
    left:0; 
 
} 
 
#menu ul { 
 
    position:absolute; 
 
    bottom:0; 
 
    display:none; 
 
    z-index:1; 
 
} 
 
#menu li { 
 
    display:block; 
 
    white-space:nowrap; 
 
    position:relative; 
 
} 
 
#menu a { 
 
    position:relative; 
 
    z-index:2; 
 
    background:#ffffff; 
 
} 
 

 
#menu .level1 { 
 
    left:100px; 
 
} 
 
#menu .level2 { 
 
    left:200px; 
 
} 
 

 
#menu .level1 li { 
 
    display:none; 
 
} 
 
#menu .level1 li:last-child { 
 
    display:inline-block; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<ul id="menu"> 
 
    <li> 
 
     <a href="#">Work</a> 
 
     <ul class="level1"> 
 
      <li class="hidden hover" id="dazed"> 
 
       <a href="#">Dazed</a> 
 
       <ul class="level2"> 
 
        <li class="hidden hover" id="dazed-1"><a href="#">Dazed<span class="pad">x</span>Amazon</a></li> 
 
        <li class="hidden hover" id="dazed-2"><a href="#">Dazed Media Re-brand</a></li> 
 
       </ul> 
 
      </li> 
 
      <li class="hidden hover" id="mad"> 
 
       <a href="#">MAD London</a> 
 
       <ul class="level2"> 
 
        <li class="hidden hover mad" id="mad-1"><a href="#">Apple</a></li> 
 
        <li class="hidden hover mad" id="mad-2"><a href="#">Every Breaking Wave</a></li> 
 
        <li class="hidden hover mad" id="mad-3"><a href="#">Films Of Innocence</a></li> 
 
        <li class="hidden hover mad" id="mad-4"><a href="#">Holiday E-Card</a></li> 
 
       </ul> 
 
      </li> 
 
      <li class="hidden hover" id="sons"><a href="#">Sons<span class="jaap">+</span>Daughters</a></li> 
 
      <li class="hidden hover" id="stimp"><a href="#">STIMPWHTWTIIIF</a></li> 
 
      <li class="hidden hover" id="black"><a href="#">Graham Fan</a></li> 
 
      <li class="hidden hover" id="igna"> 
 
       <a href="#">Inga Nemirovskaia</a> 
 
       <ul class="level2"> 
 
        <li class="hidden hover" id="igna-1"><a href="#">S/S <span id="ss">15</span></a></li> 
 
        <li class="hidden hover" id="igna-2"><a href="#">A/W 14</a></li> 
 
       </ul> 
 
      </li> 
 
      <li class="hidden hover" id="fatal"><a href="#">Vincenzo Laera</a></li> 
 
     </ul> 
 
    </li> 
 
</ul>

+0

感谢您的回复,但子菜单必须在主菜单回退之前滑回。 – angela

+0

@angela,认为我已经排序 - 它应该从右到左关闭,停止点击的元素 – Pete

+0

再次感谢皮特,你的代码很棒。我现在唯一的问题是增加影响菜单的其他功能。我已经尝试将我的代码添加到您的代码的末尾,但它毁了您的代码。你可以在这里看到http://jsfiddle.net/rabelais/7f4e0ffn/1/我怎样才能使用你的代码,但也保持其他功能的工作?感谢你的宝贵时间。 – angela