javascript - HTML/CSS/JavaScript : Open/Close Menu when Clicking Button

标签 javascript html css

我的页面有一个汉堡包图标,单击它应该会打开/关闭下拉菜单。我从 Jonathan Suh 的 github 页面中提取了汉堡包图标的代码,并试图用它实现一个打开/关闭下拉菜单(这是供您引用的页面 https://github.com/jonsuh/hamburgers)。

问题是当我点击它时,下拉菜单会出现,但是当我再次点击它时它不会消失。我已经尝试了一些事情,例如将 bool 变量设置为 false 并在单击时将其设置为 true,但是代码并没有按照我想象的方式执行。这是代码:

//declarations
var hamburger = document.querySelector(".hamburger");

function dropDown() {
  document.querySelector(".dropdown-content").style.display = "block";

}

hamburger.addEventListener("click", function() {
  hamburger.classList.toggle("is-active");
  dropDown();
});
.dropdown {
  position: relative;
  display: inline-block;
}

.dropdown-content {
  display: none;
  position: absolute;
  z-index: 1;
}

.dropdown-content a {
  color: black;
  padding: 12px 16px;
  text-decoration: none;
  display: block;
}

.show {
  display: block;
}


/*!
 * Hamburgers
 * @description Tasty CSS-animated hamburgers
 * @author Jonathan Suh @jonsuh
 * @site https://jonsuh.com/hamburgers
 * @link https://github.com/jonsuh/hamburgers
 */

.hamburger {
  padding: 15px 15px;
  display: inline-block;
  cursor: pointer;
  transition-property: opacity, filter;
  transition-duration: 0.15s;
  transition-timing-function: linear;
  font: inherit;
  color: inherit;
  text-transform: none;
  background-color: transparent;
  border: 0;
  margin: 0;
  overflow: visible;
}

.hamburger:hover {
  opacity: 0.7;
}

.hamburger-box {
  width: 40px;
  height: 24px;
  display: inline-block;
  position: relative;
}

.hamburger-inner {
  display: block;
  top: 50%;
  margin-top: -2px;
}

.hamburger-inner,
.hamburger-inner::before,
.hamburger-inner::after {
  width: 40px;
  height: 4px;
  background-color: #000;
  border-radius: 4px;
  position: absolute;
  transition-property: transform;
  transition-duration: 0.15s;
  transition-timing-function: ease;
}

.hamburger-inner::before,
.hamburger-inner::after {
  content: "";
  display: block;
}

.hamburger-inner::before {
  top: -10px;
}

.hamburger-inner::after {
  bottom: -10px;
}


/*
   * Spring
   */

.hamburger--spring .hamburger-inner {
  top: 2px;
  transition: background-color 0s 0.13s linear;
}

.hamburger--spring .hamburger-inner::before {
  top: 10px;
  transition: top 0.1s 0.2s cubic-bezier(0.33333, 0.66667, 0.66667, 1), transform 0.13s cubic-bezier(0.55, 0.055, 0.675, 0.19);
}

.hamburger--spring .hamburger-inner::after {
  top: 20px;
  transition: top 0.2s 0.2s cubic-bezier(0.33333, 0.66667, 0.66667, 1), transform 0.13s cubic-bezier(0.55, 0.055, 0.675, 0.19);
}

.hamburger--spring.is-active .hamburger-inner {
  transition-delay: 0.22s;
  background-color: transparent;
}

.hamburger--spring.is-active .hamburger-inner::before {
  top: 0;
  transition: top 0.1s 0.15s cubic-bezier(0.33333, 0, 0.66667, 0.33333), transform 0.13s 0.22s cubic-bezier(0.215, 0.61, 0.355, 1);
  transform: translate3d(0, 10px, 0) rotate(45deg);
}

.hamburger--spring.is-active .hamburger-inner::after {
  top: 0;
  transition: top 0.2s cubic-bezier(0.33333, 0, 0.66667, 0.33333), transform 0.13s 0.22s cubic-bezier(0.215, 0.61, 0.355, 1);
  transform: translate3d(0, 10px, 0) rotate(-45deg);
}
  <div class="dropDown">
    <button onclick="dropDown()" class="hamburger hamburger--spring" type="button">
        <span class = "hamburger-box">
            <span class="hamburger-inner"></span>
        </span>
        <div id="myDropDown" class="dropdown-content">
            <a href="home.html">Home</a>
            <a href="work.html">Work</a>
            <a href="resume.html">Resume</a>
            <a href="life.html">Life</a>
        </div>
    </button>
  </div>

虽然我知道可能有一个可以在 jQuery 中使用的解决方案,但我没有这方面的经验。所以请将它保存在 JavaScript 中。我对它完全陌生,但对它的工作原理有基本的了解。

最佳答案

不需要 dropDown() 或任何额外的 JS。您当前的点击事件处理程序就可以正常工作。当 .hamburger 也有 .is-active 类(已经是通过你的类(class)切换处理):

.hamburger.is-active .dropdown-content {
  display: block;
}

关于javascript - HTML/CSS/JavaScript : Open/Close Menu when Clicking Button,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47685604/

相关文章:

电话格式的 HTML 电话链接

php - session 消息未显示

javascript - 通过文本字段过滤列表

html - 如何在不更改其他图像的情况下更改侧边栏图像的边框半径?

javascript - 我如何比较两个在javascript中长度不同的数组?

javascript - 在动态 JavaScript 对象中创建动态数组(键/值对)

javascript - 如何在不同名称的输入中使用 jQuery 验证插件?

javascript - express.js 路由器中的自定义处理程序

javascript - 如何通过 Java 或 JavaScript 在 Microsoft Edge 或 Internet Explorer 中定义打印预览的比例和字母大小

html - 存在浏览器差异问题 (Firefox) - 包装器的溢出和/或高度