点击后汉堡菜单不会消失

问题描述 投票:0回答:2

我面临汉堡菜单的问题。我想让它在单击菜单位置并离开菜单后消失。我是初学者。预先感谢。

CSS

 .burger {
    display: block;
    transition: 0.3s ease-out;
  }

  .burger.active .line:first-child {
    transform: translateX(+300px);
  }

  #menu {
    display: flex;
    position: absolute;
    right: 0;
    flex-direction: column;
    top: 100px;
    height: 400px;
    text-align: center;
    width: 75%;
    z-index: 1;
    transform: translateX(100%);
    transition: 0.3s ease-out;
  }

  #menu.active {
    transform: translateX(0%);
    transition: 0.3s ease-out;
  }

  #menu li {
    font-weight: 500;
    font-size: 28px;
    line-height: normal;
  }

  #menu li a {
    color: #ffffff;
    text-decoration: none;
  }

Javascript

document.querySelectorAll(".filterable_cards img").forEach((image) => {
        image.onclick = () => {
          document.querySelector(".popup-image").style.display = "block";
          document.querySelector(".popup-image img").src =
            image.getAttribute("src");
        };
      });

HTML

 <ul id="menu">
      <li><a href="#home">Home</a></li>
      <li><a href="#about">O mnie</a></li>
      <li><a href="#graphics">Grafika</a></li>
      <li><a href="#contact">Kontakt</a></li>
    </ul>
    <div class="burger">
      <div class="line"></div>
      <div class="line"></div>
      <div class="line"></div>
    </div>

我认为主要需要有关 Javascript 代码的帮助。

javascript html css menu hamburger-menu
2个回答
0
投票
const burger = document.querySelector(".burger");
const menu = document.querySelector("#menu");

burger.addEventListener("click", () => {
  menu.classList.toggle("active");
});

document.addEventListener("click", (event) => {
  if (event.target === burger || event.target === menu) {
    return;
  }

  menu.classList.remove("active");
});

0
投票

您似乎想在单击菜单项后隐藏汉堡菜单。您可能需要在每个菜单项上添加一个事件侦听器,并在单击菜单项时切换

active
类。执行此操作的方法如下:

// JavaScript

// Get the menu items and burger element
let menuItems = document.querySelectorAll('#menu li a');
let burger = document.querySelector('.burger');

// Add an event listener to each menu item
menuItems.forEach((item) => {
  item.addEventListener('click', () => {
    // When a menu item is clicked, remove 'active' class from #menu and burger
    document.querySelector('#menu').classList.remove('active');
    burger.classList.remove('active');
  });
});

// Add click event for the burger menu
burger.addEventListener('click', () => {
  // On click, toggle 'active' class for #menu and burger
  document.querySelector('#menu').classList.toggle('active');
  burger.classList.toggle('active');
});

您还可以在单击外部时隐藏菜单:

// JavaScript

document.addEventListener('click', (event) => {
    let isClickInsideMenu = document.querySelector('#menu').contains(event.target);
    let isClickOnBurger = burger.contains(event.target);

    if (!isClickInsideMenu && !isClickOnBurger) {
        // The click was outside the menu and burger, hide them
        document.querySelector('#menu').classList.remove('active');
        burger.classList.remove('active');
    }
});

上面的代码将跟踪每个菜单项上的点击事件。当检测到单击事件时,它将从菜单和汉堡按钮中删除活动类,从而使它们隐藏。

.active
类中的更改将影响CSS变换属性,提供滑入/滑出动画。

我建议将此 JavaScript 代码添加到 HTML body 标记的末尾,或者将其放置在

DOMContentLoaded
事件之后调用的函数中,以确保在脚本运行之前所有元素都已渲染到 DOM。

祝您学习之旅一切顺利。

© www.soinside.com 2019 - 2024. All rights reserved.