我编写了一个导航菜单,里面有嵌套的下拉菜单 - 我编写了菜单,在悬停时向下滑动,并且工作正常。
然而,还有一个'show all'链接,当点击它时会扩展所有子菜单并将新类应用于容器以填充菜单。
单击会轻松展开菜单,但是再次单击会通过删除类来改变外观,因为它会再次触发该功能。我的代码如下 - 任何帮助将不胜感激!安迪
// == MENU SHOW ALL TOGGLE
// show pointer
$('#menu li#show-all').hover(function(){
$(this).css({'cursor' : 'pointer'});
});
$('#menu-container').addClass('show-single');
function toggleheight(){
if ($('#menu-container').hasClass('show-single')) {
$('#menu li').not('#show-all').fadeOut(function(){
$('#menu').animate({
height : '300px'
}, function(){
$('#menu-container').removeClass('show-single').addClass('show-all');
$('#menu li').not('#show-all').fadeIn();
});
});
}else {
$('#menu li').not('#show-all').fadeOut(function(){
$('#menu-container').removeClass('show-all').addClass('show-single');
$('#menu').animate({
height : '16px'
}, function(){
$('#menu li').not('#show-all').fadeIn();
});
});
}
}
$('#menu li#show-all').click(function(){
$(toggleheight);
});
编辑:扩展菜单,悬停链接然后向后移动并单击show all链接确实还原菜单 - 但是点击“全部显示”链接一次再展开以缩小而不导航似乎重新触发功能
答案 0 :(得分:1)
我决定不深入研究您的代码并尝试修复它,因为我认为使用简单的jQuery插件构建导航菜单有更好的方法。但是,这并不能真正帮助您解决代码问题,但希望您无论如何都会发现它很有用。
所以,这就是我想出来的。
<强> HTML:强>
<ul class="nav-menu">
<li>
<a href="#">Menu 1</a>
<ul>
<li><a href="#">Submenu 1</a></li>
<li><a href="#">Submenu 2</a>
<ul>
<li><a href="#">Subsubmenu 1</a></li>
<li><a href="#">Subsubmenu 2</a></li>
<li><a href="#">Subsubmenu 3</a></li>
<li><a href="#">Subsubmenu 4</a></li>
</ul>
</li>
<li><a href="#">Submenu 3</a></li>
<li><a href="#">Submenu 4</a></li>
</ul>
</li>
<li>
<a href="#">Menu 2</a>
<ul>
<li><a href="#">Submenu 1</a></li>
<li><a href="#">Submenu 2</a></li>
<li><a href="#">Submenu 3</a></li>
<li><a href="#">Submenu 4</a></li>
</ul>
</li>
</ul>
插件代码:
(function($){
function traverseItems($items) {
$items.each(function(){
var $item = $(this),
$submenu = $item.children("ul").hide();
if ($submenu.length) {
$item.children("a").click(function(){
$submenu.toggle();
return false;
}).append(" \>");
traverseItems($submenu.children("li"));
}
});
}
$.fn.navMenu = function (options){
var defaults = {
showAllToggle: true
};
options = $.extend({}, defaults, options);
return this.each(function(){
var $this = $(this)
.addClass("nav-menu"),
$items = $this.children("li");
traverseItems($items);
if (options.showAllToggle) {
$showAll = $("<a></a>")
.attr("href", "#")
.addClass("show-all")
.text("Toggle all")
.toggle(function(){
$this.find("ul").show();
return false;
}, function(){
$this.find("ul").hide();
return false;
})
.wrap("<li></li>")
.parent()
.prependTo($this);
}
});
};
})(jQuery);
<强>用法:强>
$(function(){
$(".nav-menu").navMenu();
});
您可以在jsFiddle上看到这一切。
我可以详细说明这个答案,并根据要求将其剪切成碎片。如果有人对如何改进这方面有任何建议或想法,我会全力以赴。