You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

侧边菜单打开时如何让背景变暗禁止外部点击,且仅菜单打开时触发外部关闭逻辑

实现方案

核心修改点

  • 新增遮罩层实现页面变暗+拦截外部点击:新增全屏固定定位的遮罩元素,z-index介于页面内容和侧边菜单之间,菜单打开时显示半透明黑色背景,自然拦截下层内容的点击操作。
  • 优化点击外部关闭逻辑:在原有全局mouseup事件中增加menuOpen状态判断,仅当菜单处于打开状态时才执行关闭校验,同时修正原代码中jQuery选择器的错误(菜单ID为myMenu,原代码漏写ID选择符#且ID值错误)。

修改后完整代码

HTML代码

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<!-- 新增遮罩层 -->
<div id="overlay"></div>
<p>This is just random information to make my point clear, don't take too much attention to it.</p>
<a href="javascript:void(0)" class="closebtn" onclick="openNav()">Open Menu</a>
<p>Extra random Stuff</p>
<p>You can close the menu clicking elsewhere the page.</p>
<div id="myMenu">
  <ul>
    <li>This is menu stuff</li>
    <li>Menu Stuff 2</li>
    <li>Menu Stuff 3</li>
  </ul>
</div>

CSS代码

#myMenu {
  height      : 100%;
  width       : 0;
  position    : fixed;
  /* 菜单层级高于遮罩 */
  z-index     : 10;
  top         : 0;
  right       : 0;
  background  : blue;
  overflow-x  : hidden;
  transition  : 0.5s;
  padding-top : 60px;
  display     : flex;
  align-items : center;
  opacity     : 0.98;
  color       : #fff;
}
/* 新增遮罩层样式 */
#overlay {
  position: fixed;
  top: 0;
  left: 0;
  width: 0;
  height: 100%;
  background: rgba(0,0,0,0.5);
  z-index: 9;
  transition: 0.5s;
}

JS代码

var menuOpen = false;

function openNav() {
  document.getElementById("myMenu").style.width = "50%";
  // 打开遮罩
  document.getElementById("overlay").style.width = "100%";
  menuOpen = true;
}

function closeNav() {
  document.getElementById("myMenu").style.width = "0%";
  // 关闭遮罩
  document.getElementById("overlay").style.width = "0%";
  menuOpen = false;
}

$(document).mouseup(function(e) {
  // 仅菜单打开时触发外部关闭逻辑
  if(menuOpen) {
    var container = $("#myMenu");
    if (!container.is(e.target) && container.has(e.target).length === 0) {
      closeNav();
    }
  }
});

内容的提问来源于stack exchange,提问作者Alexandro Giles

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 00:15:01