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

点击汉堡按钮切换CSS类的JavaScript功能故障求助

汉堡按钮切换导航栏样式与菜单展开的问题修复

需求说明

点击汉堡按钮时完成两组操作:

  • 给.navbar添加sticky-costum-2类,让导航栏样式放大
  • 展开菜单(通过给ul添加top-[80px]和opacity-100类)
    再次点击时反向操作:移除样式类、收起菜单

现有问题代码

function Menu(e) {
  let list = document.querySelector('ul');
  e.name === 'menu' ? (e.name = "close", list.classList.add('top-[80px]'), list.classList.add('opacity-100')) : 
                      (e.name = "menu", list.classList.remove('top-[80px]'), list.classList.remove('opacity-100'))
  if (e) {
    $('.navbar').addClass("sticky-costum-2");
  } else {
    $('.navbar').removeClass("sticky-costum-2");
  }
};

问题核心:if(e)永远为真——e是触发点击的按钮元素,始终存在,所以永远只会执行添加类的操作,不会移除。

复用你之前的音频切换逻辑修复

你之前的音频播放/暂停功能,是通过判断audio.paused状态值来分支执行不同操作,这里可以完全照搬这个思路:通过按钮的name属性值(menu/close)来决定添加或移除类。

修复后的代码:

function Menu(e) {
  let list = document.querySelector('ul');
  const navbar = $('.navbar'); // 缓存DOM元素,避免重复查询
  
  if (e.name === 'menu') {
    // 切换为关闭状态:展开菜单+添加导航栏样式类
    e.name = "close";
    list.classList.add('top-[80px]', 'opacity-100');
    navbar.addClass("sticky-costum-2");
  } else {
    // 切换为菜单状态:收起菜单+移除导航栏样式类
    e.name = "menu";
    list.classList.remove('top-[80px]', 'opacity-100');
    navbar.removeClass("sticky-costum-2");
  }
};

关键改进点

  • 把原有的三元表达式拆成if/else结构,和你熟悉的音频切换逻辑一致,更易读易维护
  • 导航栏的样式操作和菜单的展开/收起操作绑定到同一个状态判断分支里,保证两者状态完全同步
  • 缓存.navbar元素,减少DOM查询次数,提升性能

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 17:56:06