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

汉堡菜单二次切换时无法恢复初始旋转状态的问题求助

汉堡菜单二次切换时无法恢复初始旋转状态的问题求助

嘿,我来帮你搞定这个问题!你的核心问题在于切换旋转状态的逻辑写错了,而且尝试的那行代码完全不符合语法规范,所以根本没法生效。

先给你指出代码里的两个关键错误:

  1. 你每次点击都直接给bento_box_wrapper.style.transform赋值为rotate(315deg),不管当前是展开还是收起状态,所以第二次点击时还是会强制设置成315度,完全没机会转回初始角度。
  2. 你尝试的bento_box_wrapper.classList.toggle = 'rotate(45 deg)'是完全错误的写法——classList.toggle是一个方法,不是属性,而且旋转效果是通过transform样式实现的,不能直接给类名赋值旋转值。

接下来给你两种简单可行的解决方案,推荐用第一种,更符合前端开发的最佳实践:


方案一:用CSS类控制旋转状态(推荐)

这种方法把样式逻辑放到CSS里,JS只负责切换类名,代码更清晰,也更容易维护,还能加过渡动画让效果更丝滑。

  1. 先在你的CSS里添加状态类(假设汉堡初始角度是45度):
/* 汉堡菜单初始状态 */
.bento_box_wrapper {
  transform: rotate(45deg);
  transition: transform 0.3s ease; /* 加上过渡动画,旋转更平滑 */
}

/* 菜单展开时的旋转状态 */
.bento_box_wrapper.menu-open {
  transform: rotate(315deg);
}
  1. 修改JS代码,把旋转逻辑改成切换类名,同时把模糊效果也改成toggleClass(你之前用addClass会导致模糊效果只加不减,也是个小问题):
const bento_box_wrapper = document.querySelector('.bento_box_wrapper');
const overlayWrapper = document.querySelector('.overlayWrapper');
const mainNavLinksWrapper = document.querySelector('.mainNavLinksWrapper');

bento_box_wrapper.onclick = function() {
  // 切换遮罩和菜单的显示状态
  overlayWrapper.classList.toggle('overlayWrapperSlideDown');
  mainNavLinksWrapper.classList.toggle('mainNavLinksWrapperSlideUp');
  
  // 切换模糊效果(用toggleClass点击两次会自动移除)
  $('.bento_box_wrapper').toggleClass('blur');
  $('div#toggle').toggleClass('blur');
  
  // 切换汉堡菜单的旋转状态
  bento_box_wrapper.classList.toggle('menu-open');
}

方案二:在JS里动态判断并修改transform

如果不想新增CSS类,也可以在JS里判断当前的旋转状态,然后手动切换角度:

const bento_box_wrapper = document.querySelector('.bento_box_wrapper');
const overlayWrapper = document.querySelector('.overlayWrapper');
const mainNavLinksWrapper = document.querySelector('.mainNavLinksWrapper');

bento_box_wrapper.onclick = function() {
  // 切换遮罩和菜单的显示状态
  overlayWrapper.classList.toggle('overlayWrapperSlideDown');
  mainNavLinksWrapper.classList.toggle('mainNavLinksWrapperSlideUp');
  
  // 切换模糊效果
  $('.bento_box_wrapper').toggleClass('blur');
  $('div#toggle').toggleClass('blur');
  
  // 获取当前生效的旋转样式,判断后切换角度
  const currentStyle = window.getComputedStyle(bento_box_wrapper);
  const isRotated = currentStyle.transform.includes('315');
  
  if (isRotated) {
    bento_box_wrapper.style.transform = 'rotate(45deg)';
  } else {
    bento_box_wrapper.style.transform = 'rotate(315deg)';
  }
}

不过这种方法需要获取计算后的样式,逻辑稍微复杂一点,还是方案一更简洁可靠。

试试上面的方法,应该就能解决你的问题啦!

备注:内容来源于stack exchange,提问作者REELHERO

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 11:13:07