当我在其外部单击时无法关闭模态
Can't close modal when I click outside of it
我正在构建我的第一个网站,但在使用 javascript 关闭模式 (nav) 外部点击时遇到问题。
HTML:
<nav>
<img src="/Images/ham.png" alt="toggle menu" class="menu" id="menu">
</a>
<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>
</nav>
Javascript:
<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();
});
exit.addEventListener('click', function(e) {
nav.classList.add('hide-mobile');
e.preventDefault();
});
window.onclick = function(event) {
if (event.target == nav) {
nav.classList.toggle('hide-mobile');
e.preventDefault();
}
else if (event.target != nav){
nav.classlist.add('hide-mobile');
e.preventDefault();
}
}
</script>
CSS:
.hide-mobile{
right: -400px;
transition: linear .5s;
}
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;
}
我从教程中获得了第一组 javascript 代码(菜单和退出按钮功能),现在我正在尝试添加外部点击关闭功能。我添加了一个 window.onclick 函数来在点击导航时显示导航模式,并在点击导航外部时隐藏它,但当我点击导航外部时它不会关闭。
对我做错了什么有什么想法吗?谢谢
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();
}
}
这可以用你的方式解决你的问题。
在window.onclick函数中,你应该检查模态是否打开?您可以在模式处于活动状态时添加特定的 class,如果它处于活动状态,您可以将其关闭。
我正在构建我的第一个网站,但在使用 javascript 关闭模式 (nav) 外部点击时遇到问题。
HTML:
<nav>
<img src="/Images/ham.png" alt="toggle menu" class="menu" id="menu">
</a>
<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>
</nav>
Javascript:
<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();
});
exit.addEventListener('click', function(e) {
nav.classList.add('hide-mobile');
e.preventDefault();
});
window.onclick = function(event) {
if (event.target == nav) {
nav.classList.toggle('hide-mobile');
e.preventDefault();
}
else if (event.target != nav){
nav.classlist.add('hide-mobile');
e.preventDefault();
}
}
</script>
CSS:
.hide-mobile{
right: -400px;
transition: linear .5s;
}
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;
}
我从教程中获得了第一组 javascript 代码(菜单和退出按钮功能),现在我正在尝试添加外部点击关闭功能。我添加了一个 window.onclick 函数来在点击导航时显示导航模式,并在点击导航外部时隐藏它,但当我点击导航外部时它不会关闭。 对我做错了什么有什么想法吗?谢谢
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();
}
}
这可以用你的方式解决你的问题。
在window.onclick函数中,你应该检查模态是否打开?您可以在模式处于活动状态时添加特定的 class,如果它处于活动状态,您可以将其关闭。