HTML-边栏在其外部单击时不会关闭

时间:2018-07-03 20:06:59

标签: javascript html css sidebar

我有一个边栏,它显示何时按下图像。但是,当我在侧边栏外部单击时,不是侧边栏的任何区域都不会关闭。我尝试查找它,但没有找到解决方案。

我对html不太熟悉,因此这可能很容易解决。

var side = document.getElementById('mySidenav');
sideBarOpen = false;

function openNav() {
  document.getElementById("mySidenav").style.width = "300px";
  document.getElementById("arrow").style.transform = "rotate(90deg)";
  document.body.style.backgroundColor = "rgba(0,0,0,0.4)";

  sideBarOpen = true;
}

function closeNav() {
  document.getElementById("mySidenav").style.width = "0";
  document.getElementById("arrow").style.transform = "rotate(0deg)";
  document.body.style.backgroundColor = "white";
  sideBarOpen = false;
}

window.onclick = function(event) {
  if (sideBarOpen) {
    if (!event.target == side) {
      closeNav();
    }
  }
}
<div id="mySidenav" class="sidenav">
  <a href="javascript:void(0)" class="closebtn" onclick="closeNav()">&times;</a>
  <a href="#"><img src="clubsIcon.svg" style="width: 30px; height: 30px;" align="center"></a>
  <a href="#"> &#8594;  <img src="srIcon.svg" style="width: 30px; height: 30px;" align="center"></a>
  <a href="#"><img src="cricketIcon.svg" style="width: 30px; height: 30px;" align="center"></a>
  <a href="#"><img src="fblaIcon.svg" style="width: 30px; height: 30px;" align="center"></a>
  <a href="#"><img src="roboticsIcon.svg" style="width: 30px; height: 30px;" align="center"></a>
</div>

<div style="font-size:30px;cursor:pointer;" onclick="openNav()">
  <img src="arrow.png" style="width: 20px; height: 20px;" id="arrow" class="arrowclass">
</div>

1 个答案:

答案 0 :(得分:2)

代码中错误的行是这样的:

if (!event.target == side) {

as !event.target将返回一个布尔值,然后将其与元素进行比较。因此,您始终会从此比较中得到否定的答复。

应该是:

if (event.target !== side) {

整理后,您还会遇到一个逻辑问题,因为打开器按钮位于侧边栏的外部。除了现有的检查不是来自边栏的检查之外,您还需要添加检查窗口单击事件是否不是来自打开按钮的检查。查看下面的代码更改:

<div  id="openIcon" style="font-size:30px;cursor:pointer;" onclick="openNav()">
  <img src="arrow.png" style="width: 20px; height: 20px;" id="arrow" class="arrowclass">
</div>

字幕:

window.onclick = function(event) {
  if (sideBarOpen) {
    if (event.target !== side && event.target !== document.getElementById('openIcon')) {
      closeNav();
    }
  }
}
相关问题