简体   繁体   English

导航菜单不会在切换菜单上关闭

[英]Toggle Menu won't close on nav click

As the title says. 如标题所示。

The menu open as expected, it closes as expected IF YOU CLICK THE CLOSE button. 菜单按预期方式打开,如果您单击“关闭”按钮,则按预期方式关闭。

But once the menu is open, when you click on any of the nav links, the menu won't close, irrespective of the screen-size/device. 但是一旦菜单打开,当您单击任何导航链接时,无论屏幕大小/设备如何,菜单都不会关闭。

I have tried removing this part if (windowWidth <= 767) { but it made no difference. 我曾尝试删除if (windowWidth <= 767) {但没有区别。

Any advice? 有什么建议吗?

/*===============================================
    Toggle Menu
  ===============================================*/
  var menu = $(".menu");
  var toggleBtn = $(".toggle-btn");

  toggleBtn.on("click", function(e) {
    if (menu.hasClass("show-menu")) {
      menu.removeClass("show-menu");
    }
    else {
      menu.addClass("show-menu");
    }
    e.stopPropagation();
  });

  // Navicon transform into X //
  toggleBtn.on("click", function() {
    if (toggleBtn.hasClass("toggle-close")) {
      toggleBtn.removeClass("toggle-close");
    }
    else {
      toggleBtn.addClass("toggle-close");
    }
  });

  // Close Menu
  if (windowWidth <= 767) {
    $(document).on("click", function() {
      if (menu.hasClass("show-menu")) {
        menu.removeClass("show-menu");
      }
      if (toggleBtn.hasClass("toggle-close")) {
        toggleBtn.removeClass("toggle-close");
      }

    });
  }

Here's the html: 这是html:

  <!-- Toggle Menu -->
      <button class="toggle-btn">
        <span class="lines"></span>
      </button>
      <div class="menu">
        <ul class="nav">
          <li class="nav-item">
            <a class="nav-link" href="#home">Home</a>
          </li>
          <li class="nav-item">
            <a class="nav-link" href="#education">About</a>
          </li>
          <li class="nav-item">
            <a class="nav-link" href="#experience">Skills</a>
          </li>
          <li class="nav-item">
            <a class="nav-link" href="#portfolio">Experience</a>
          </li>
          <li class="nav-item">
            <a class="nav-link" href="#services">Education</a>
          </li>
          <li class="nav-item">
            <a class="nav-link" href="#testimonial">Personality</a>
          </li>
          <li class="nav-item">
            <a class="nav-link" href="#contact">Contact</a>
          </li>
        </ul>
      </div>
      <!-- end Toggle menu -->

You say that you have tried it without if (windowWidth <= 767) and it did't work. 您说您尝试过不使用if (windowWidth <= 767) ,但它没有用。 Well, all I did was remove this if and now it works. 好吧,我所要做的就是删除它, if现在可以的话。 You probably have or had another bug that was or is preventing it from working correctly. 您可能已经或曾经有另一个错误,或者正在阻止它正常工作。

 /*=============================================== Toggle Menu ===============================================*/ var menu = $(".menu"); var toggleBtn = $(".toggle-btn"); toggleBtn.on("click", function(e) { if (menu.hasClass("show-menu")) { menu.removeClass("show-menu"); } else { menu.addClass("show-menu"); } e.stopPropagation(); }); // Navicon transform into X // toggleBtn.on("click", function() { if (toggleBtn.hasClass("toggle-close")) { toggleBtn.removeClass("toggle-close"); } else { toggleBtn.addClass("toggle-close"); } }); // Close Menu //if (window.width <= 767) { <-- does not work with this $(document).on("click", function() { if (menu.hasClass("show-menu")) { menu.removeClass("show-menu"); } if (toggleBtn.hasClass("toggle-close")) { toggleBtn.removeClass("toggle-close"); } }); //} 
 .menu { display: none; } .show-menu { display: block; } 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <button class="toggle-btn"> Toggle </button> <div class="menu"> <ul class="nav"> <li class="nav-item"> <a class="nav-link" href="#home">Home</a> </li> <li class="nav-item"> <a class="nav-link" href="#education">About</a> </li> <li class="nav-item"> <a class="nav-link" href="#experience">Skills</a> </li> <li class="nav-item"> <a class="nav-link" href="#portfolio">Experience</a> </li> <li class="nav-item"> <a class="nav-link" href="#services">Education</a> </li> <li class="nav-item"> <a class="nav-link" href="#testimonial">Personality</a> </li> <li class="nav-item"> <a class="nav-link" href="#contact">Contact</a> </li> </ul> </div> 

 var menu = $(".menu"); var toggleBtn = $(".toggle-btn"); toggleBtn.on("click", function(e) { menu.toggleClass(); }); $(".nav-link").on('click',function(e){ menu.toggleClass(); }) 
 .menu{ visibility:hidden; } 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <button class="toggle-btn"> <span class="lines">Nav</span> </button> <div class="menu"> <ul class="nav"> <li class="nav-item"> <a class="nav-link" href="#home">Home</a> </li> <li class="nav-item"> <a class="nav-link" href="#education">About</a> </li> <li class="nav-item"> <a class="nav-link" href="#experience">Skills</a> </li> <li class="nav-item"> <a class="nav-link" href="#portfolio">Experience</a> </li> <li class="nav-item"> <a class="nav-link" href="#services">Education</a> </li> <li class="nav-item"> <a class="nav-link" href="#testimonial">Personality</a> </li> <li class="nav-item"> <a class="nav-link" href="#contact">Contact</a> </li> </ul> <script src="https://code.jquery.com/jquery-3.1.0.js"></script> </div> 

Not quite sure about your demand. 不太确定您的需求。 As I understand, you wanna click the button to show the menu. 据我了解,您想单击该按钮以显示菜单。 Click the navi item to redirect to the specific page and hide the menu. 单击导航项以重定向到特定页面并隐藏菜单。

Change the code like below for mobile : 如下更改移动代码:

$(document).on('click touchstart', function () {

Try the below css for iphone : 尝试以下iPhone的CSS:

<style>
    .nav-link
    {
         cursor: pointer;
    }
</style>

Check the link $(document).click() not working correctly on iPhone. 检查链接$(document).click()在iPhone上无法正常工作。 jquery for more details. jQuery的更多细节。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM