当单击外部模态菜单以关闭功能处于活动状态时,模态菜单链接不起作用
Modal menu links dont work when click outside modal menu to close function is active
我正在尝试创建一个模态菜单,当您在其外部单击时它会自行关闭,但是当我添加一个带有 event.target != nav
的 window.onclick
函数(nav 是菜单)时,子元素导航内部(菜单选项)不受功能影响,菜单关闭。
<nav>
<img src="/Images/ham.png" alt="toggle menu" class="menu" id="menu">
</a>
<div>
<ul class="show-desktop hide-mobile" id="nav">
<li id="exit" class="exit-btn hide-desktop">
<img src="/Images/exit.svg" alt="exit menu">
</li>
<li><a href="index.html">home</a></li>
<li><a href="work.html">work</a></li>
<li><a href="about.html">about</a></li>
<li><a href="contact.html">contact</a></li>
</ul>
</div>
</nav>
我尝试在元素列表中添加一个带有 id 的 div 以及在每个选项元素(索引、工作、关于、联系方式)中添加一个 individual id ) 并添加连续的 window.onclick
函数来匹配每个元素,但它只适用于 1 个元素而不是全部 4 个。
<script>
var menu = document.getElementById('menu');
var nav = document.getElementById('nav');
var exit = document.getElementById('exit');
menu.addEventListener('click', function(e) {
nav.classList.toggle('hide-mobile');
e.preventDefault();
e.stopPropagation();
});
exit.addEventListener('click', function(e) {
nav.classList.add('hide-mobile');
e.preventDefault();
});
window.onclick = function(event) {
if (event.target != nav){
nav.classList.add('hide-mobile');
event.preventDefault();
}}
</script>
nav ul {
position: fixed;
width: 60%;
top: 0;
right: 0;
text-align: left;
background: rgb(36,41,44);
height: 100%;
z-index: 7;
padding-top: 3em;
right: 0px;
transition: ease-out .5s;
}
nav ul li a {
color: white;
text-decoration: none;
display: block;
width: 100%;
padding: 1em 2em;
background-color: rgb(49, 55, 59);
text-transform: uppercase;
font-weight: bold;
}
nav ul li a:hover {
background-color: rgb(65, 73, 78);
}
我想要得到的是 ul class (id=nav) 的子元素作为链接而不是关闭菜单。
一种可能的方法,也是我通常使用的方法,是使用覆盖层 div
100% 下方 模态的宽度和高度,并将 onclick 处理程序添加到该叠加层而不是 window 对象。该覆盖层应该仅在模态本身可见时才可见,否则不可见,指针事件:none.
我正在尝试创建一个模态菜单,当您在其外部单击时它会自行关闭,但是当我添加一个带有 event.target != nav
的 window.onclick
函数(nav 是菜单)时,子元素导航内部(菜单选项)不受功能影响,菜单关闭。
<nav>
<img src="/Images/ham.png" alt="toggle menu" class="menu" id="menu">
</a>
<div>
<ul class="show-desktop hide-mobile" id="nav">
<li id="exit" class="exit-btn hide-desktop">
<img src="/Images/exit.svg" alt="exit menu">
</li>
<li><a href="index.html">home</a></li>
<li><a href="work.html">work</a></li>
<li><a href="about.html">about</a></li>
<li><a href="contact.html">contact</a></li>
</ul>
</div>
</nav>
我尝试在元素列表中添加一个带有 id 的 div 以及在每个选项元素(索引、工作、关于、联系方式)中添加一个 individual id ) 并添加连续的 window.onclick
函数来匹配每个元素,但它只适用于 1 个元素而不是全部 4 个。
<script>
var menu = document.getElementById('menu');
var nav = document.getElementById('nav');
var exit = document.getElementById('exit');
menu.addEventListener('click', function(e) {
nav.classList.toggle('hide-mobile');
e.preventDefault();
e.stopPropagation();
});
exit.addEventListener('click', function(e) {
nav.classList.add('hide-mobile');
e.preventDefault();
});
window.onclick = function(event) {
if (event.target != nav){
nav.classList.add('hide-mobile');
event.preventDefault();
}}
</script>
nav ul {
position: fixed;
width: 60%;
top: 0;
right: 0;
text-align: left;
background: rgb(36,41,44);
height: 100%;
z-index: 7;
padding-top: 3em;
right: 0px;
transition: ease-out .5s;
}
nav ul li a {
color: white;
text-decoration: none;
display: block;
width: 100%;
padding: 1em 2em;
background-color: rgb(49, 55, 59);
text-transform: uppercase;
font-weight: bold;
}
nav ul li a:hover {
background-color: rgb(65, 73, 78);
}
我想要得到的是 ul class (id=nav) 的子元素作为链接而不是关闭菜单。
一种可能的方法,也是我通常使用的方法,是使用覆盖层 div 100% 下方 模态的宽度和高度,并将 onclick 处理程序添加到该叠加层而不是 window 对象。该覆盖层应该仅在模态本身可见时才可见,否则不可见,指针事件:none.