汉堡菜单需要点击2下才能重新打开。冲突jquery?
要再次访问移动导航菜单,我需要单击汉堡图标两次 地点在这里 复制步骤:汉堡菜单需要点击2下才能重新打开。冲突jquery?,jquery,html,css,Jquery,Html,Css,要再次访问移动导航菜单,我需要单击汉堡图标两次 地点在这里 复制步骤: 确保浏览器正在查看手机,或至少是平板电脑宽度,以便汉堡图标仅显示在导航栏上 滚动超过100vh以确保导航栏处于视野内 单击汉堡图标(将显示菜单) 单击导航项目,即“自行车” 导航菜单将折叠,您将被引导到“自行车”部分 单击汉堡包图标(单击时不会显示菜单) 单击汉堡包图标(现在将显示菜单,并按预期工作) 我的代码如下: function initMenu() { if($('.hamburger').len
- 确保浏览器正在查看手机,或至少是平板电脑宽度,以便汉堡图标仅显示在导航栏上
- 滚动超过100vh以确保导航栏处于视野内
- 单击汉堡图标(将显示菜单)
- 单击导航项目,即“自行车”
- 导航菜单将折叠,您将被引导到“自行车”部分
- 单击汉堡包图标(单击时不会显示菜单)
- 单击汉堡包图标(现在将显示菜单,并按预期工作)
function initMenu()
{
if($('.hamburger').length && $('.menu').length)
{
var hamb = $('.hamburger');
hamb.on('click', function()
{
if(!menuActive)
{
openMenu();
}
else
{
closeMenu();
}
});
}
}
function openMenu()
{
menu.addClass('active');
menuActive = true;
}
function closeMenu()
{
menu.removeClass('active');
menuActive = false;
}
我在移动导航栏中单击并锚定的逻辑如下
$('.menu_nav_list a').on('click', function(e){
e.preventDefault();
$(this).closest('.menu').removeClass('active');
});
我认为代码的第二部分需要包含函数“closeMenu()”——我一直在尝试将该函数添加到代码的第二部分,但没有任何影响
第一段代码是在一个单独的js文件中,第二部分只是链接到HTML文件中,在单独js文件的链接/引用下面-所以我们希望该函数可以使用
是否有一种方法可以将这两种方法结合起来,以便单击“.menu\u nav\u list”锚也会触发函数closeMenu()?问题是,您的单击逻辑只是删除类。它没有改变状态变量
$('.menu_nav_list a').on('click', function(e){
e.preventDefault();
$(this).closest('.menu').removeClass('active');
menuActive = false;
});
这就是为什么在DOM中使用反映状态的有状态变量是一个坏主意的原因。你必须保持两者。如果您选择了menu.hasClass('active')
来获取该布尔值,而不是维护menuActive,那么您将保存一个额外的变量,并且永远不会冒失去同步的风险
编辑:或者像您在最后所说的那样,您的单击处理程序可以重用closeMenu()
方法,而无需重复该逻辑。看起来就像:
$('.menu_nav_list a').on('click', function(e){
e.preventDefault();
closeMenu();
});
如果您使用
active
类控制菜单的状态,那么menuActive
变量是不必要的<代码>菜单。hasClass('active')将为您提供该布尔值,而无需维护辅助状态变量。令人沮丧的是,这不起作用。您是否愿意成为一名明星,使用closeMenu()函数向我展示代码的外观?如果实现有问题,我会非常感激。我在您的页面上放置了一条调试器语句,它会检查menuActive是否为false以打开菜单,如果您必须双击,则在第一次单击时仍然为true