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

使用HTML、CSS、JS实现侧边栏子菜单及响应式功能,修复Myntra移动端克隆代码问题

问题修复方案

核心问题点

现有代码中子菜单功能失效的原因如下:

  • 原生DOM的children是属性而非方法,不能直接传入选择器筛选目标子元素
  • 菜单内的<a>标签会触发默认跳转行为,直接中断JS交互逻辑
  • 仅绑定了一级菜单的点击事件,二级子菜单未配置对应的交互逻辑
  • 子菜单点击事件会冒泡触发父级菜单的点击事件,导致父级菜单意外收起
  • 未配置汉堡菜单打开、点击侧边栏外区域关闭的交互逻辑

修复后完整JavaScript代码

// 阻止所有菜单链接的默认跳转行为
document.querySelectorAll('.item-link').forEach(link => {
  link.addEventListener('click', e => e.preventDefault());
});

// 一级菜单展开/收起逻辑
document.querySelectorAll('.menu-items').forEach(menuItem => {
  menuItem.addEventListener('click', e => {
    // 阻止事件冒泡,避免子元素点击触发父级逻辑
    e.stopPropagation();
    menuItem.classList.toggle('active');
    const dropList = menuItem.querySelector('.drop-list');
    if(dropList) {
      dropList.style.display = dropList.style.display === 'block' ? 'none' : 'block';
      // 箭头旋转效果,不需要可以删除
      const arrow = menuItem.querySelector('.fas.fa-chevron-right');
      if(arrow) arrow.style.transform = dropList.style.display === 'block' ? 'rotate(90deg)' : 'rotate(0)';
    }
  });
});

// 二级子菜单展开/收起逻辑
document.querySelectorAll('.drop-item').forEach(dropItem => {
  dropItem.addEventListener('click', e => {
    e.stopPropagation();
    const subDropList = dropItem.querySelector('.drop-menu-list');
    if(subDropList) {
      subDropList.style.display = subDropList.style.display === 'block' ? 'none' : 'block';
      const arrow = dropItem.querySelector('.fas.fa-chevron-right');
      if(arrow) arrow.style.transform = subDropList.style.display === 'block' ? 'rotate(90deg)' : 'rotate(0)';
    }
  });
});

// 汉堡菜单打开侧边栏逻辑(请将.hamburger替换为你实际的汉堡按钮类名)
const hamburgerBtn = document.querySelector('.hamburger');
const sidebar = document.querySelector('.sidebar');
if(hamburgerBtn && sidebar) {
  hamburgerBtn.addEventListener('click', e => {
    e.stopPropagation();
    // 如果用CSS类控制侧边栏滑入,替换为sidebar.classList.toggle('active')即可
    sidebar.style.display = 'block';
  });

  // 点击侧边栏外区域关闭侧边栏
  document.addEventListener('click', e => {
    if(sidebar.style.display === 'block' && !sidebar.contains(e.target) && e.target !== hamburgerBtn) {
      sidebar.style.display = 'none';
      // 如果用CSS类控制,替换为sidebar.classList.remove('active')
    }
  });
}

可选优化CSS(提升交互体验)

/* 箭头旋转过渡动画 */
.fas.fa-chevron-right {
  transition: transform 0.2s ease;
}

/* 侧边栏滑入动画,配合类控制使用 */
.sidebar {
  position: fixed;
  left: 0;
  top: 0;
  height: 100vh;
  width: 280px;
  transform: translateX(-100%);
  transition: transform 0.3s ease;
  z-index: 999;
}
.sidebar.active {
  transform: translateX(0);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 11:24:04