点击活动

时间:2017-01-13 18:37:57

标签: javascript jquery html css hamburger-menu

我有一个汉堡包菜单几乎完成,只有一个我无法弄清楚的错误/问题。我的导航链接到主页上的不同区域。因此,在主页上,用户可以单击导航链接,该链接将立即将其下移到页面上的所需位置。

我的问题是因为没有加载所以一旦用户点击导航链接他们被带到该位置但下拉菜单将不会关闭。我尝试在JS中添加.hide,它隐藏了点击链接的下拉列表,但这创建了我的新问题。

用户单击其中一个导航链接后,它会隐藏菜单,但再次单击菜单图标时,菜单根本不会打开。在开发工具中,我看到在点击其中一个导航链接时,它被赋予了显示风格:无,所以我觉得问题可能就在那里。感谢您的帮助,如果需要任何其他信息,请告诉我们!

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();
});

2 个答案:

答案 0 :(得分:6)

如果您要使用.toggleClass('open')打开菜单,请使用它关闭菜单。

但一般情况下,您会想要使用.addClass().removeClass()代替:

$('.hamburger').on('click', function () {
  $('.menu').addClass('open');
});

$( '.menu a' ).on("click", function(){
  $('.menu').removeClass('open');
});

答案 1 :(得分:0)

如果您的汉堡菜单后面有复选框,则可以将其简单设置为未选中以关闭汉堡菜单

  function hideMenu(){
  let menuOpen = document.querySelector('.toggler').checked;

  if(menuOpen = true){
    document.querySelector('.toggler').checked = false;
  }
  }
  window.addEventListener("scroll", hideMenu);