如何通过单击菜单外部来关闭移动菜单

Posted

技术标签:

【中文标题】如何通过单击菜单外部来关闭移动菜单【英文标题】:How to close mobile menu by clicking outside the menu 【发布时间】:2020-12-03 05:02:48 【问题描述】:

我的网站基于 WP 主题,网站上的主菜单是汉堡菜单。 菜单的宽度大约是屏幕宽度的 1/4(在桌面上)

我想单击屏幕提醒 3/4 中的任意位置,此单击应折叠菜单。它目前仅在我选择“X”按钮时关闭。

在此处查看网站: https://joos.app/

这里是相关的 JS 代码来实现这一点。我可以使用您的建议来添加/修改此代码以实现它

  /* Navigation Events */

  jQuery('.nav-butter.hidden_menu, .nav-butter.visible_menu').on('click', function () 
    if (jQuery(this).hasClass('active')) 
      jQuery(this).removeClass('active').parents('.site-header').find('.navigation').removeClass('active');
     else 
      jQuery(this).addClass('active').parents('.site-header').find('.navigation').addClass('active');
    
  );
  
  jQuery('.nav-butter.side_menu').on('click', function () 
    if (jQuery(this).hasClass('active')) 
      jQuery(this).removeClass('active');
      jQuery('.site-header-side-nav').removeClass('active');
     else 
      jQuery(this).addClass('active');
      jQuery('.site-header-side-nav').addClass('active');
    
  );

  jQuery('[href="#"]').on('click', function(e) 
    e.preventDefault();
  );
  
  jQuery('.side-navigation a').on('click', function (e) 
    var $el = jQuery(this),
      $parent = $el.parent();

    if ($parent.hasClass('menu-item-has-children') && !$parent.hasClass('active')) 
      e.preventDefault();

      $parent.addClass('hide active').siblings().addClass('hide');
      $el.parents('.sub-menu').addClass('opened');
    
  );
  
  jQuery('.side-navigation .sub-menu > .back').on('click', function () 
    var $el = jQuery(this);

    $el.parent().parent().removeClass('hide active').siblings().removeClass('hide');
    $el.parent().parent().removeClass('opened').parent().removeClass('opened');
  );
  
  jQuery('.side-navigation').find('.sub-menu').prepend('<li class="back free-basic-ui-elements-left-arrow"></li>');

提前致谢,请忽略其余的小错误,网站仍在构建过程中。

【问题讨论】:

请在此处添加html和css代码 【参考方案1】:

您可以在菜单后面添加一个透明层,上面有一个事件。因此,当用户单击该透明层时,菜单将关闭。

小例子:

  $(document).ready(function() 
    $("#menu-opener").click(function() 
      $(".menu-container").toggle();
    )
    
    $("#menu-layer").click(function() 
      $(".menu-container").toggle();
    )
  );
body, html 
  height: 100%;
  width: 100%;
  padding: 0px;

.menu-container 
  position: absolute;
  right: 0px;
  top: 0px;
  bottom: 0px;
  left: 0px;


#menu-layer 
  z-index:1;
  position: absolute;
  right: 0px;
  top: 0px;
  bottom: 0px;
  left: 0px;
  background-color: transparent;


.menu 
  position: absolute;
  z-index: 2;
  right: 0px;
  top: 0px;
  bottom: 0px;
  width: 100px;
  background-color: blue;
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>


<button id="menu-opener">Open menu</button>

<div class="menu-container" style="display:none">
  <div id="menu-layer">
  </div>
  <div class="menu">
    Here is the menu
  </div>
</div>

【讨论】:

以上是关于如何通过单击菜单外部来关闭移动菜单的主要内容,如果未能解决你的问题,请参考以下文章

在 Blazor 上单击 div 或元素外部以将其关闭的事件

jQuery:单击外部元素以“关闭”使用toggleClass出现的菜单

通过单击外部(组件)在 Vuejs 中隐藏下拉菜单

选择页面锚链接时如何关闭移动菜单

QML。无法通过在 android 上按外部来关闭菜单

如何在 iPad 上的 jquery 外部单击关闭菜单