gpt4 book ai didi

javascript - 当用户使用 Javascript 在外部单击时关闭下拉菜单

转载 作者:太空宇宙 更新时间:2023-11-04 00:42:53 25 4
gpt4 key购买 nike

我正在尝试创建点击打开的下拉菜单。这是通过将 .active 类添加到基本上显示菜单的 .dropdown-trigger.on-click 类元素来完成的。到目前为止,一切正常,但我真的不明白当用户在打开的菜单之外的任何地方单击时如何关闭打开的下拉菜单。到目前为止,我的代码如下所示:

document.querySelectorAll(".dropdown-trigger.on-click").forEach(function(elem) {
elem.addEventListener("click", function() {
this.classList.toggle("active");
})
})
.dropdown {
display: inline-block;
position: relative;
}
.dropdown .dropdown-menu {
display: none;
position: absolute;
-moz-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15);
-webkit-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15);
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15);
width: auto;
border: 1px solid rgba(0, 0, 0, 0.15);
border-radius: var(--border-radius);
background-color: #ffffff;
z-index: 1;
}
.dropdown .dropdown-menu ul {
padding: 0;
margin: 0;
}
.dropdown .dropdown-menu ul > li {
list-style: none;
margin: 0;
}
.dropdown .dropdown-menu ul > li.dropdown-menu-content {
padding: 0.6rem 1.2rem;
white-space: nowrap;
}
.dropdown .dropdown-menu ul > li.dropdown-menu-divider {
height: 1px;
background-color: rgba(0, 0, 0, 0.05);
}
.dropdown .dropdown-menu ul > li > a {
display: block;
text-decoration: none;
padding: 0.6rem 1.2rem;
color: rgba(0, 0, 0, 0.8);
cursor: pointer;
white-space: nowrap;
min-width: 12rem;
}
.dropdown .dropdown-menu ul > li > a:hover {
background-color: rgba(0, 0, 0, 0.025);
}
.dropdown .dropdown-trigger.on-click.active + .dropdown-menu {
display: block;
}
<div class="dropdown">
<button class="dropdown-trigger on-click">Pick your weapon <i class="fa fa-angle-down"></i></button>
<div class="dropdown-menu">
<ul>
<li class="dropdown-menu-content">
Weapons
</li>
<li class="dropdown-menu-divider"></li>
<li><a href="#">Sword</a></li>
<li><a href="#">Lance</a></li>
<li><a href="#">Axe</a></li>
<li><a href="#">Bow</a></li>
</ul>
</div>
</div>

<div class="dropdown">
<button class="dropdown-trigger on-click">Pick your class <i class="fa fa-angle-down"></i></button>
<div class="dropdown-menu">
<ul>
<li class="dropdown-menu-content">
Classes
</li>
<li class="dropdown-menu-divider"></li>
<li><a href="#">Fighter</a></li>
<li><a href="#">Archer</a></li>
<li><a href="#">Thief</a></li>
<li><a href="#">Ninja</a></li>
</ul>
</div>
</div>

注意:当用户点击打开的菜单时,菜单不应关闭。它应该仅在用户在打开的菜单之外单击时关闭。

如何使用纯 Javascript 执行此操作?感谢您的帮助。

最佳答案

这会在您的文档中添加一个点击,以检查按钮是否被点击。如果没有,它将检查是否有事件下拉菜单并将其设为非事件状态。

document.addEventListener('click', function (event) {

// Return if clicking on trigger
if (event.target.matches('.dropdown-trigger')) {
return;
}

document.querySelectorAll(".dropdown-trigger.active").forEach(function(elem) {
elem.classList.remove('active');
})

}, false);

关于javascript - 当用户使用 Javascript 在外部单击时关闭下拉菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57948084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com