javascript - 菜单打开时禁用单击并使背景变暗(div)
问题描述
我有一个侧边菜单,当单击按钮时会显示,它会在更改其宽度后显示。一切正常,尽管如此,我想让整个身体(菜单除外)看起来变暗,如果可能的话,防止点击菜单以外的任何东西。当菜单关闭时,一切都应该恢复正常。
JS 的第二部分用于关闭菜单,当检测到菜单外的点击时,它可以工作,但我想让它只有在菜单打开时才处于活动状态,例如:
if(menuOpen)
{
$(document).mouseup(function(e)
{
var container = $("mySidenav");
if (!container.is(e.target) && container.has(e.target).length === 0)
{
closeNav();
}
});
}
var menuOpen = false;
function openNav() {
document.getElementById("myMenu").style.width = "50%";
menuOpen = true;
}
function closeNav() {
document.getElementById("myMenu").style.width = "0%";
menuOpen = false;
}
$(document).mouseup(function(e) {
var container = $("mySidenav");
if (!container.is(e.target) && container.has(e.target).length === 0) {
closeNav();
}
});
#myMenu {
height : 100%;
width : 0;
position : fixed;
z-index : 1;
top : 0;
right : 0;
background : blue;
overflow-x : hidden;
transition : 0.5s;
padding-top : 60px;
display : flex;
align-items : center;
opacity : 0.98;
z-index : 9;
color : #fff;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<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>
解决方案
打开菜单时添加覆盖 div 并切换它的显示属性 - 关闭
var menuOpen = false;
const menu = document.getElementById("myMenu")
const overlay = document.getElementById('overlay')
function openNav() {
menu.style.width = "50%";
menuOpen = true;
overlay.style.display = 'block'
}
function closeNav() {
menu.style.width = "0%";
overlay.style.display = 'none'
menuOpen = false;
}
$('#myMenu').click(function(e) {
closeNav();
menuOpen = false;
});
#myMenu {
height: 100%;
width: 0;
position: fixed;
z-index: 1;
top: 0;
right: 0;
background: blue;
overflow-x: hidden;
transition: 0.5s;
padding-top: 60px;
display: flex;
align-items: center;
opacity: 0.98;
z-index: 9;
color: #fff;
}
#overlay {
position: fixed;
display: none;
left: 0;
top: 0;
right: 0;
bottom: 0;
z-index: 5;
background: rgba(0, 0, 0, 0.5);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<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>
<div id="overlay">
</div>
推荐阅读
- excel - 在选择中查找第二大数字,然后在 Excel 中显示相邻单元格(包括重复项)
- python - pysheds 中的“from_raster”属性出错
- php - 如何使用 Cron 作业执行 PHP 文件
- r - 使用R中的括号和管道进行子集/过滤
- ios - 我如何理解远程方在 pjsip 中停止了其视频
- python - Python:NameError:未定义名称'u'
- postgresql - 如何添加部分约束并且也适用于postgres的重叠日期范围?
- android - Android Kotlin:如果我不选择要保存在应用程序上的图像,应用程序将无法运行
- javascript - 支付计算器,但没有任何反应
- hibernate - Spring Data JPA 从 UPDATE @Query 返回列