响应式菜单脚本忽略子菜单?

时间:2014-03-28 02:49:00

标签: javascript jquery html

我有一个用于切换高度的响应式菜单的脚本:

       jQuery(function() {  
            var pull        = jQuery('#pull');  
                menu        = jQuery('nav ul');  
                menuHeight  = menu.height();  

            jQuery(pull).on('click', function(e) {  
                e.preventDefault();  
                menu.slideToggle();  
            });  
        }); 
        jQuery(window).resize(function(){  
            var w = jQuery(window).width();  
            if(w > 320 && menu.is(':hidden')) {  
                menu.removeAttr('style');  
            }  
        });

问题是嵌套的无序列表的高度没有被考虑在内,它只是弹出"在和废墟效果。 HTML标记将是:

<ul>
    <li></li>
    <li>
        <ul>
        </ul>
    </li>
</ul>

您可以在http://www.windycitydigital.net/iconvert看到它。任何人都知道如何防止嵌套的UL破坏切换动画并使其全部流畅过渡?

1 个答案:

答案 0 :(得分:1)

这里有几件事可能有用:

使用选择器,您可以选择顶级ul以及任何subnav ul ...

尝试将该选择器更改为:

menu = jQuery('nav > ul')

此选择器将仅选择nav元素的直接子元素,并阻止slideToggle函数在您的子区域ul上触发,该子区域看起来在CSS中包含一个显示块,由以下选择器设置样式:

#navigation ul ul

Slidetoggle将切换显示:none,使用您当前正在使用的选择器。

我也强烈考虑将您的选择器更改为更清洁,更精确:

#navigation > ul

这将选择导航元素的直接子项。使用此选择器代替#navigation ul可以减少使用CSS,因为您不必使用更通用的#navigation ul选择器覆盖您已经应用于subnav元素的样式(因为您和# 39;见过,影响#navigation中的每个ul。

由于您已将类应用于子nav ul,因此可以使用以下方式直接设置样式:

#navigation .sub-menu

希望这有助于引导您朝着正确的方向前进!

!!编辑(在下面评论后)!!

试试这个JavaScript:

jQuery(function() {  
    var pull        = jQuery('#pull'), 
        menu        = jQuery('.menu', '#navigation');  

    pull.on('click', function(e) {  
        e.preventDefault();  
        menu.slideToggle('medium');
    });  
});  

哦,并确保将#navigation ul {display:none}更改为#navigation&gt; ul {display:none},否则上面提到的subnav隐藏的问题将持续存在......