javascript - 响应式菜单点击不关闭

标签 javascript html css

我有一个带有一些 Javascript 的小汉堡菜单。它运行良好,但我希望在您按下链接(主页、关于、工作、元素)时关闭菜单,因为它用于单页机。

有人可以帮帮我吗?

<nav>
  <div class="logo">
    <h4>The Logo</h4>
  </div>
  <ul class="nav-links">
    <li><a href="#">Home</a></li>
    <li><a href="#">About</a></li>
    <li><a href="#">Work</a></li>
    <li><a href="#">Projects</a></li>
  </ul>
  <div class="burger">
    <div class="line1"></div>
    <div class="line2"></div>
    <div class="line3"></div>
  </div>
</nav>

Codepen

最佳答案

您可以使用以下内容作为入门。本质上,您将点击处理程序添加到 navlink a 标记,并通过查找适当的 nav-active 类来检查导航当前是否已退出。如果找到,则通过删除您为展开菜单而添加的相关类来反转动画。

  const links = document.querySelectorAll(".nav-links li a");
  links.forEach(link => {
    link.addEventListener(`click`, () => {
      if(nav.classList.contains('nav-active')) {
        nav.classList.remove(`nav-active`);
        burger.classList.remove(`toggle`);
        navLinks.forEach((link, index) => {
          if (link.style.animation) {
            link.style.animation = ``;
          } else {
            link.style.animation = `navLinkFade 0.5s ease forwards ${index / 7 +
              0.3}s`;
          }
        });
      }
    });
  });

来自您的代码笔的完整 JS:

const navSlide = () => {
  const burger = document.querySelector(`.burger`);
  const nav = document.querySelector(`.nav-links`);
  const navLinks = document.querySelectorAll(".nav-links li");

  const links = document.querySelectorAll(".nav-links li a");
  links.forEach(link => {
    link.addEventListener(`click`, () => {
      if(nav.classList.contains('nav-active')) {
        nav.classList.remove(`nav-active`);
        burger.classList.remove(`toggle`);
        navLinks.forEach((link, index) => {
          if (link.style.animation) {
            link.style.animation = ``;
          } else {
            link.style.animation = `navLinkFade 0.5s ease forwards ${index / 7 +
              0.3}s`;
          }
        });
      }
    });
  });

  // Nav animation
  burger.addEventListener(`click`, () => {
    nav.classList.toggle(`nav-active`);

    // Links animation
    navLinks.forEach((link, index) => {
      if (link.style.animation) {
        link.style.animation = ``;
      } else {
        link.style.animation = `navLinkFade 0.5s ease forwards ${index / 7 +
          0.3}s`;
      }
    });

    // Burger animation
    burger.classList.toggle(`toggle`);
  });
};

navSlide();

关于javascript - 响应式菜单点击不关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58832498/

相关文章:

html - 将上一个和下一个按钮嵌入到图像中

javascript - 带图像选择器的 WordPress 自定义小部件

javascript - 按 lastModified 过滤集合

html - HTML 中的自定义谷歌字体错误

html - float div 在浏览器缩放时向左添加空间

javascript - 如何从 Javascript 调用访问伪元素样式?

javascript - 让表单运行一个javascript函数?

javascript - v-img 仅在与常规 img HTML 标记一起使用时出现在 v-for 循环中

javascript - 如果显示另一个元素,如何隐藏折叠的元素

javascript - 如何在具有多行的 SVG 文件中着色?