从我第一个问题开始的一天,我不敢说我回来了。不过这次遇到了不同的问题……
我有一个带有一些嵌套菜单的水平菜单,如下所示:
<nav>
<ul id="mainNav">
<li><a href="expand-the-sub-menu">Option 1</a>
<ul id="option1Nav">
<li><a href="somewhere">Option 1 Link 1</a></li>
<li><a href="somewhere">Option 1 Link 2</a></li>
<li><a href="somewhere">Option 1 Link 3</a></li>
<li><a href="somewhere">Option 1 Link 4</a></li>
<li><a href="somewhere">Option 1 Link 5</a></li>
</ul>
</li>
<li><a href="expand-the-sub-menu">Option 2</a>
<ul id="option2Nav">
<li><a href="somewhere">Option 2 Link 1</a></li>
<li><a href="somewhere">Option 2 Link 2</a></li>
<li><a href="somewhere">Option 2 Link 3</a></li>
<li><a href="somewhere">Option 2 Link 4</a></li>
<li><a href="somewhere">Option 2 Link 5</a></li>
</ul>
</li>
<li><a href="somewhere">Option 3</a></li>
<li><a href="somewhere">Option 4</a></li>
<li><a href="somewhere">Option 5</a></li>
<li><a href="somewhere">Option 6</a></li>
</ul>
</nav>
CraftyFella昨天帮助使基本行为正常工作,但我想对此进行扩展,以包括基于当前菜单状态的条件行为。
到目前为止的(注释)逻辑和代码如下:
$('#mainNav ul').hide();
$('#mainNav>li>a').click(function(){
var elem = this;
// If clicked element has a sibling ul with specified class
if($(elem).next().hasClass("navChild")){
// & If another child ul is already visible
if ($('.navChild').is(':visible')){
// Fade out any others, and fade this one in
$(this).fadeOut(300, 'easeOutQuint', function(){
$(elem).next("ul").fadeIn(300,'easeOutQuint');
});
return false;
// Else if no child ul is visible
}else{
// Raise main links and fade in current child ul
$('nav').animate({bottom:'60px'},300,'easeOutQuint',function(){
$(elem).next().fadeIn(300,'easeOutQuint');
});
}
// Else clicked element has no sibling ul with specified class
}else{
// If others are visible, fade them out and lower the main links
$('#mainNav ul').fadeOut(300, 'easeOutQuint',function(){
$('nav').animate({bottom:'24px'},300,'easeOutQuint');
});
}
});
简而言之:所有子菜单都应该被隐藏,如果作为点击的兄弟出现,它们应该被显示/交换,或者如果不是,则全部隐藏。
可悲的是,它不太有效,除了“交换”部分之外它几乎可以 - 如果一个子菜单已经可见,并且另一个被触发显示,两者最终都被显示,并且被点击的元素消失了(!)。
它也可能是糟糕的代码——我对此仍然很陌生——但如果有人可以帮助处理逻辑部分,我可以稍后再清理。
编辑 - http://jsfiddle.net/hKYJz/1/ - 现在奇怪的是根本不工作>:(