单击事件后关闭汉堡菜单
Close hamburger menu after click event
我有一个汉堡包菜单,它几乎是完整的,只有 1 个 bug/issue 我想不通。我的导航 links 到主页上的不同区域。因此,在主页上,用户可以单击导航 link,这会立即将他们带到页面上的所需位置。
我的问题是没有加载,所以一旦用户点击导航 link,他们就会被带到该位置,但下拉菜单不会关闭。我尝试将 .hide 添加到 JS,它隐藏了单击 link 时的下拉菜单,但这引起了我的新问题。
用户单击其中一个导航 link 后,它确实隐藏了菜单,但再次单击菜单图标后,菜单根本不会打开。在开发工具中,我看到在单击其中一个导航 links 时,它被赋予了 display:none 的样式,所以我觉得问题可能就在那里。感谢您的帮助,如果需要任何其他信息,请告诉我!
HTML:
<nav class="navbar navbar-light navbar-fixed-top">
<div class="wrapping container-fluid">
<div class="hamburger">
<div class="line"></div>
<div class="line"></div>
<div class="line"></div>
</div>
<ul class="nav navbar-nav float-sm-right mr-0 menu">
<li class="nav-item">
<span class="sr-only"></span>
</li>
<li class="nav-item">
<a class="nav-link" href="#schedule">Schedule<span class="sr-only">(current)</span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="#workshops">Workshops</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#locations">Location</a>
</li>
<li class="nav-item">
<a class="nav-link last-link" href="#register">Register</a>
</li>
</ul>
<a class="navbar-brand" href="#home"><img class="logo" src="img/Logo.png" alt=""></a>
</div>
</nav>
CSS 此菜单:
.menu{
height: 0;
overflow: hidden;
transition: height 0.3s;
}
.open{
height: 295px;
}
.hamburger {
cursor: pointer;
padding: 15px 10px 15px 0;
display: block;
float: right;
margin-top: 15px;
}
JS:
$('.hamburger').on('click', function () {
$('.menu').toggleClass('open');
});
$( '.menu a' ).on("click", function(){
$('.menu').hide();
});
如果您要使用 .toggleClass('open')
打开菜单,也可以使用它来关闭菜单。
不过,一般来说,您会希望使用 .addClass()
和 .removeClass()
:
$('.hamburger').on('click', function () {
$('.menu').addClass('open');
});
$( '.menu a' ).on("click", function(){
$('.menu').removeClass('open');
});
如果您的汉堡菜单后面有复选框,您可以简单地将其设置为未选中以关闭汉堡菜单
function hideMenu(){
let menuOpen = document.querySelector('.toggler').checked;
if(menuOpen = true){
document.querySelector('.toggler').checked = false;
}
}
window.addEventListener("scroll", hideMenu);
我有一个汉堡包菜单,它几乎是完整的,只有 1 个 bug/issue 我想不通。我的导航 links 到主页上的不同区域。因此,在主页上,用户可以单击导航 link,这会立即将他们带到页面上的所需位置。
我的问题是没有加载,所以一旦用户点击导航 link,他们就会被带到该位置,但下拉菜单不会关闭。我尝试将 .hide 添加到 JS,它隐藏了单击 link 时的下拉菜单,但这引起了我的新问题。
用户单击其中一个导航 link 后,它确实隐藏了菜单,但再次单击菜单图标后,菜单根本不会打开。在开发工具中,我看到在单击其中一个导航 links 时,它被赋予了 display:none 的样式,所以我觉得问题可能就在那里。感谢您的帮助,如果需要任何其他信息,请告诉我!
HTML:
<nav class="navbar navbar-light navbar-fixed-top">
<div class="wrapping container-fluid">
<div class="hamburger">
<div class="line"></div>
<div class="line"></div>
<div class="line"></div>
</div>
<ul class="nav navbar-nav float-sm-right mr-0 menu">
<li class="nav-item">
<span class="sr-only"></span>
</li>
<li class="nav-item">
<a class="nav-link" href="#schedule">Schedule<span class="sr-only">(current)</span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="#workshops">Workshops</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#locations">Location</a>
</li>
<li class="nav-item">
<a class="nav-link last-link" href="#register">Register</a>
</li>
</ul>
<a class="navbar-brand" href="#home"><img class="logo" src="img/Logo.png" alt=""></a>
</div>
</nav>
CSS 此菜单:
.menu{
height: 0;
overflow: hidden;
transition: height 0.3s;
}
.open{
height: 295px;
}
.hamburger {
cursor: pointer;
padding: 15px 10px 15px 0;
display: block;
float: right;
margin-top: 15px;
}
JS:
$('.hamburger').on('click', function () {
$('.menu').toggleClass('open');
});
$( '.menu a' ).on("click", function(){
$('.menu').hide();
});
如果您要使用 .toggleClass('open')
打开菜单,也可以使用它来关闭菜单。
不过,一般来说,您会希望使用 .addClass()
和 .removeClass()
:
$('.hamburger').on('click', function () {
$('.menu').addClass('open');
});
$( '.menu a' ).on("click", function(){
$('.menu').removeClass('open');
});
如果您的汉堡菜单后面有复选框,您可以简单地将其设置为未选中以关闭汉堡菜单
function hideMenu(){
let menuOpen = document.querySelector('.toggler').checked;
if(menuOpen = true){
document.querySelector('.toggler').checked = false;
}
}
window.addEventListener("scroll", hideMenu);