【问题标题】:Make navbar close on click of menu item单击菜单项时关闭导航栏
【发布时间】:2021-03-10 10:14:01
【问题描述】:

当我在网站的移动版本中单击菜单项之一时,我无法让我的导航栏消失。我知道这里已经有类似问题的问题,但大多数解决方案都使用 jquery,我对 javascript 真的很陌生,所以我遇到了麻烦:/ 我真的很感谢一些帮助,我在我的智慧结束了!

问题:在移动设备中,我有一个菜单按钮,可以打开带有我的菜单项的全屏导航栏。单击该按钮效果很好,它使导航栏出现和消失。但是,当单击其中一个链接时,它会滚动到页面上的正确位置,但导航栏保持打开状态。我尝试将 eventListener 添加到菜单项中,就像菜单按钮一样,但这根本不起作用......

代码如下:

HTML

<nav>
      <div class="logo">
        <a href="#"
          ><img
            src="./images/original_white.png"
            alt="disco milk logo"
            width="300px"
            height="auto"
            class="logo-still"
        /></a>
      </div>
      <div class="menunav">
        <ul class="nav-links">
          <li>
            <a href="#about">about us</a>
          </li>
          <li><a href="#say-hello">say hello!</a></li>
        </ul>
        <div class="burger">
          <img
            src="./images/menu_icon.png"
            alt="menu icon"
            class="burger-icon"
          />
        </div>
      </div>
    </nav>

CSS

nav {
    width: 100vw;
    padding-left: 37px;
    padding-right: 37px;
  }

  .nav-links {
    position: absolute;
    right: 0px;
    height: 100vh;
    width: 100vw;
    background-color: #231f20;
    z-index: 1;
    top: 0px;
    display: flex;
    flex-direction: column;
    align-items: center;
    transform: translateX(100%);
    justify-content: center;
    transition: transform 0.5s ease-in;
  }

  .nav-links li {
    padding: 10px;
    opacity: 0;
  }

  .nav-active {
    transform: translateX(0%);
  }

和 JS

const navSlide = ()=>{
    const burger = document.querySelector('.burger');
    const nav = document.querySelector('.nav-links');
    const navLinks = document.querySelectorAll('.nav-links li');
    
    burger.addEventListener('click', ()=>{
        // Toggle Nav
        nav.classList.toggle('nav-active');
        // Animate Links
        navLinks.forEach((link, index)=>{
            if(link.style.animation){
            link.style.animation = '';
            } else {
            link.style.animation = `navLinkFade 0.5s ease forwards ${index / 5 + 0.5}s`;
            }
        });
        //Burger Animation
        burger.classList.toggle('toggle');

    });


}

navSlide();

我真的很感谢任何帮助!非常感谢:)

【问题讨论】:

    标签: javascript html css navbar


    【解决方案1】:
    // insert this after your js variables
    document.querySelectorAll(".nav-links li a").forEach(item => {
        item.addEventListener('click', ()=>{
            // Toggle Nav
            nav.classList.toggle('nav-active');
        });
    });
    // I think you get the idea
    

    【讨论】:

    • 我做了一个不用js也可以工作的导航栏,有兴趣的可以敲我
    • 非常感谢您的帮助!您建议的代码运行良好,它使导航栏关闭。唯一的问题是,当我再次打开它时,菜单链接消失了,所以我稍微更改了代码以包含 link.style.animation,现在一切正常!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    相关资源
    最近更新 更多