【发布时间】:2020-06-10 14:25:46
【问题描述】:
0
我编写了一个函数,当用户单击菜单图标时,它会显示/隐藏菜单。我希望它在用户单击菜单外的任何位置时隐藏菜单,并在用户单击图标时再次打开。
到目前为止,菜单默认是关闭/隐藏的,所以当我单击菜单图标时,菜单会打开,当我在菜单打开时单击图标时,它会关闭。我想通过单击菜单图标或屏幕上的任意位置来关闭菜单。
我可以在 else 语句中添加事件侦听器以在用户单击屏幕时关闭菜单吗?以及如何在用户第一次点击后移除事件监听器?
function smallMenu() {
var x = document.getElementById("buttons");
if (x.className === "optionBar") {
// opens the menu
x.className += " responsive";
} else {
// closes the menu
x.className = "optionBar";
}
}
HTML:
<div class="optionBar" id="buttons">
<div id="containerSelector" class="align">
<!-- options for screen display -->
<div id="elementSelector" class="displayOptions"style="border: 3px solid green;">
<!-- group by system -->
<button onclick="">
<span class="butIcon">
<i class="fas fa-columns"></i>
</span>Group by System
</button>
<!-- hide graphs-->
<button onclick="toggleGraphsFunction()">
<span class="butIcon">
<i class="fas fa-chart-line"></i>
</span><span id="butName">Hide Graphs</span>
</button>
</div>
<!--refresh and elipsis container-->
<div class="displayOptions2"style="border: 3px solid red;">
<!-- refresh icon -->
<a href="#" class="refresh">
<i class="fa fa-redo"></i>
</a>
<!-- elipsis menu for small screens-->
<a href="javascript:void(0);" class="icon" onclick="menuSmall()">
<i class="fas fa-ellipsis-v"></i>
</a>
</div>
</div>
</div>
【问题讨论】:
-
你能提供一些基本的HTML吗?
-
您应该使用classList 方法来检查、添加或删除类名。
-
@theblackgigant 使用 classList 和 className 有什么区别?
-
@zfrisch 我添加了一些 html,我不确定这是否足以提供帮助
-
@user12324017 它确保您不会意外删除所需的类名。而且它也有助于提高可读性,
classList.add("something")告诉我它正在添加一个类名,但使用className += "something"需要一秒钟才能意识到它的作用。
标签: javascript menu dom-events addeventlistener removeeventlistener