You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS Hamburger Menu点击菜单项后无法自动折叠的实现方案咨询

解决方案

方案1:仅实现核心功能(菜单项点击自动折叠,无动画)

仅需要修改JS代码,给所有菜单项绑定点击事件触发菜单切换即可,无需改动CSS和HTML:

// 保留原有切换函数
function myFunction() {
  var x = document.getElementById("myLinks");
  if (x.style.display === "block") {
    x.style.display = "none";
  } else {
    x.style.display = "block";
  }
}

// 新增以下代码,页面加载后给所有菜单项绑定关闭事件
document.addEventListener('DOMContentLoaded', function() {
  const menuLinks = document.querySelectorAll('#myLinks a');
  menuLinks.forEach(link => {
    link.addEventListener('click', myFunction);
  });
});

方案2:核心功能+slide滑入滑出动画

需要同时修改JS和CSS,用类名切换控制菜单状态,配合CSS过渡实现动画效果:

1. 修改CSS代码

.topnav {
  overflow: hidden;
  background-color: #333;
  position: relative;
}

.topnav #myLinks {
  /* 移除原有display:none */
  max-height: 0;
  overflow: hidden;
  /* 动画配置:时长0.3s,缓动函数ease-out,可自行调整 */
  transition: max-height 0.3s ease-out;
  background-color: #333;
}

/* 新增菜单展开状态类 */
.topnav #myLinks.menu-open {
  max-height: 300px; /* 取值大于菜单实际最大高度即可 */
}

.topnav a {
  color: white;
  padding: 14px 16px;
  text-decoration: none;
  font-size: 17px;
  display: block;
}

/* Style the hamburger menu */
.topnav a.icon {
  background: black;
  display: block;
  position: absolute;
  right: 0;
  top: 0;
}


.topnav a:hover {
  background-color: #ddd;
  color: black;
}


.active {
  background-color: #04AA6D;
  color: white;
}

2. 修改JS代码

function myFunction() {
  var x = document.getElementById("myLinks");
  // 切换展开类替代直接控制display
  x.classList.toggle('menu-open');
}

document.addEventListener('DOMContentLoaded', function() {
  const menuLinks = document.querySelectorAll('#myLinks a');
  menuLinks.forEach(link => {
    link.addEventListener('click', myFunction);
  });
});

3. HTML代码无需修改

说明:如果菜单的菜单项数量较多,可调整.topnav #myLinks.menu-open中的max-height数值,只要大于你实际菜单的总高度即可。

内容的提问来源于stack exchange,提问作者yanus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 04:36:03