javascript - 无法获得切换功能(JavaScript 可以工作)

标签 javascript html css

我正在尝试使用 JavaScript(而不是 jQuery)构建一个简单的切换按钮来来回转换元素。作为一个新手(对于 JavaScript),我尽了最大的努力,但无法弄清楚。主要思想是当点击按钮时,侧边菜单应该从侧面显示,再次点击时应该隐藏到同一个地方。 请帮忙。

function toggleNavBar() {
  var nav = document.getElementById("sideNav"),
    button = document.getElementById("checkButton"),
    check = "hidden";
  if (check == "hidden") {
    nav.style.transform = "translate(0px)";
    check = "shown";
  } else if (check == "shown") {
    nav.style.transform = "translate(-290px)";
    check = "hidden";
  }
}
body {
  margin: 0 auto;
  padding: 0;
}
#sideNav {
  background-color: #96e6b3;
  display: inline-block;
  width: 20%;
  position: fixed;
  height: 100vh;
  z-index: 2;
  overflow: hidden;
  -webkit-transform: translate(-290px);
  /* Safari */
  transform: translate(-290px);
  */
}
nav ul {
  list-style-type: none;
  font-family: Junction, "Times New Roman", sans-serif;
  font-size: 1.9em;
  margin-top: 24%;
}
nav ul li {
  margin-top: 1%;
  padding-top: 4.7%;
  margin-left: -50px;
  text-align: center;
}
nav a {
  text-decoration: none;
  color: #000000;
}
nav li:hover {
  background-color: #34cf6d;
}
<!doctype html>
<html lang="en">

<head>
  <title>Check</title>
  <meta charset="UTF-8">
  <link href="style.css" rel="stylesheet" type="text/css">
  <link href="font.css" rel="stylesheet" type="text/css">
  <script src="https://code.jquery.com/jquery-1.11.3.js"></script>
  <link rel="stylesheet" href="styleCheck.css">

  <style>
    <!--very specific small CSS for this document--> #toggler {
      text-decoration: underline;
    }
    #toggler:hover {
      cursor: pointer;
    }
  </style>

</head>

<body>
  <div>
    <div class="o-content">
      <div class="o-container">
        <div class="o-grid">
          <button id="checkButton" class="c-hamburger c-hamburger--htx" onclick="toggleNavBar()">
            <span>toggle menu</span>
          </button>
        </div>
      </div>
    </div>
  </div>
  <div id="sideNav">
    <nav>
      <ul>
        <li><a href="indexCheck.htm">Home</a>
        </li>
        <li><a href="items.htm">Items</a>
        </li>
        <li><a href="XML.htm">XML</a>
        </li>
      </ul>
    </nav>
  </div>
  <!--side Nav-->

</body>

</html>

最佳答案

你应该只声明一次你的check变量:

var check = "hidden";

function toggleNavBar() {
    var nav = document.getElementById("sideNav"),
        button = document.getElementById("checkButton");
    if (check == "hidden") {
        nav.style.transform = "translate(0px)";
        check = "shown";
    } else if (check == "shown") {
        nav.style.transform = "translate(-290px)";
        check = "hidden";
    }
}

一些优化(假设这是在文档准备好之后完成的):

var toggleNavBar = (function() {
    var check = "hidden";
    var nav = document.getElementById("sideNav");
    var button = document.getElementById("checkButton");
    return function() {
        if (check == "hidden") {
            nav.style.transform = "translate(0px)";
            check = "shown";
        } else {
            nav.style.transform = "translate(-290px)";
            check = "hidden";
        }
    }
})();

关于javascript - 无法获得切换功能(JavaScript 可以工作),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33636629/

相关文章:

javascript - 使用 Javascript 将字符串添加到 CSS 代码

javascript - 是否可以为 React 的类模型打开 React.js 自动绑定(bind)

Javascript HTML 选择下拉菜单

javascript - 如何在移动浏览器上有效地模糊视频?

css - 如何在 CSS 中为无限序列重复第 n 个子规则

Javascript 更改样式表中的值

html - 我希望我的 div 的边界完全重叠,但是当我将它们与 flex 对齐时会变得奇怪

java - 在 dataGrid 内的第一行显示新行或聚焦于新添加的行

html - 图像不会与父 div 中的文本内联显示

html - Firefox 中的 Flexslider 关闭屏幕