首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

js 菜单折叠

在JavaScript中实现菜单折叠功能,通常涉及到DOM操作和事件处理。以下是一个基础的实现示例,包括HTML结构、CSS样式和JavaScript代码。

HTML结构

代码语言:txt
复制
<ul class="menu">
  <li>
    <span class="menu-title">菜单1</span>
    <ul class="submenu">
      <li>子菜单1-1</li>
      <li>子菜单1-2</li>
    </ul>
  </li>
  <li>
    <span class="menu-title">菜单2</span>
    <ul class="submenu">
      <li>子菜单2-1</li>
      <li>子菜单2-2</li>
    </ul>
  </li>
</ul>

CSS样式

代码语言:txt
复制
.menu .submenu {
  display: none;
}

.menu .submenu.active {
  display: block;
}

JavaScript代码

代码语言:txt
复制
document.addEventListener('DOMContentLoaded', function() {
  const menuTitles = document.querySelectorAll('.menu-title');

  menuTitles.forEach(function(title) {
    title.addEventListener('click', function() {
      const submenu = this.nextElementSibling;
      if (submenu && submenu.classList.contains('submenu')) {
        submenu.classList.toggle('active');
      }
    });
  });
});

解释

  1. HTML结构:定义了一个包含主菜单和子菜单的列表结构。
  2. CSS样式:默认情况下,子菜单是隐藏的(display: none)。当子菜单的父元素(即.submenu)具有.active类时,子菜单显示(display: block)。
  3. JavaScript代码
    • 在文档加载完成后,选择所有具有.menu-title类的元素。
    • 为每个.menu-title元素添加点击事件监听器。
    • 当点击事件触发时,找到当前点击元素的相邻兄弟元素(即子菜单),并切换其.active类。

优势

  • 简洁:代码简单易懂,易于维护。
  • 灵活:可以轻松扩展到更复杂的菜单结构。
  • 性能:使用事件委托和简单的DOM操作,性能开销较小。

应用场景

  • 网站导航:适用于网站的侧边栏或顶部导航菜单。
  • 应用界面:适用于各种需要折叠菜单的应用界面,如管理后台、设置页面等。

常见问题及解决方法

  1. 子菜单不显示
    • 确保CSS样式正确应用,特别是.submenu.active类的样式。
    • 确保JavaScript代码正确选择并操作了子菜单元素。
  • 多个子菜单同时展开
    • 可以在切换.active类之前,先移除所有子菜单的.active类,确保一次只有一个子菜单展开。
    • 可以在切换.active类之前,先移除所有子菜单的.active类,确保一次只有一个子菜单展开。

通过以上方法,你可以实现一个基本的菜单折叠功能,并根据需要进行扩展和优化。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • iOS支持展开折叠的弹出菜单(水平方向弹出菜单视图)

    2.水平方向弹出菜单视图的应用场景: 2.1、门店商品的支持的功能:向右横向展开视图(操作:下/上架、打印、编辑、同步网络)支持再次折叠隐藏视图 ?...2.2、网店商品目前只包含下架功能:展开折叠视图:(包含上/下架商品功能) ? 竖向弹出菜单视图 弹出菜单:会员模块的右上角的下拉菜单(竖向) ?...I、 支持展开折叠的弹出菜单的实现思路 1.1将弹出视图添加到keyWindow,蒙版也添加到主窗口(主要原因是点击屏幕的空白处,需要隐藏弹出视图) #define kWindow [UIApplication...,还是折叠 #pragma mark - ******** 判断是展开弹出菜单,还是折叠 - (void)expandMenu:(id)x{//点击按钮 self.popmenuView.model...2.水平方向弹出菜单视图的应用场景: 2.1、门店商品的支持的功能:向右横向展开视图(操作:下/上架、打印、编辑、同步网络)支持再次折叠隐藏视图 ?

    2.5K10

    利用JQuery实现左侧菜单栏可折叠功能

    今天给大家介绍一下左侧菜单栏可折叠功能,在后台管理中左侧菜单折叠功能是特别常见的一个功能,基本不管是什么类型的管理后台都会涉及到这个功能的实现。...今天给大家介绍的是二级可折叠菜单的功能,相对一级的菜单折叠功能就显得稍微比较复杂一点了,我这里将给大家介绍菜单折叠过程中三种变换形式。...第一种变换形式是:不管点击哪一级菜单都可以打开或者关闭本级菜单,但是不会影响其他级别的菜单: <!...color:#316a91; padding-left:30px;} js...这样左侧折叠菜单的三种状态就都已经实现了,是不是特别简单呀。 如果大家想要这个折叠菜单的源代码或者对文章有什么异议都可以加我QQ哦:208017534     欢迎打扰哦!!!

    7K70

    iOS支持展开折叠的弹出菜单(水平方向弹出菜单视图) 【修订版】

    的内容是:将水平方向弹出菜单视图集成到VC的View 疑问解答,请关注公众号:iOS逆向 1.支持展开折叠的弹出菜单的实现思路: 1.1将弹出视图添加到keyWindow,蒙版也添加到主窗口(主要原因是点击屏幕的空白处.../** 触发折叠菜单隐藏和显示的按钮 */ @property (nonatomic,weak) UIButton *btn; /** 用于计算折叠菜单frame, */ @property...,还是折叠 #pragma mark - ******** 判断是展开弹出菜单,还是折叠 - (void)expandMenu:(id)x{//点击按钮 self.popmenuView.model...2.水平方向弹出菜单视图的应用场景: 2.1、门店商品的支持的功能: 向右横向展开视图(操作:下/上架、打印、编辑、同步网络)支持再次折叠隐藏视图 ?...2.2、网店商品目前只包含下架功能:展开折叠视图:(包含上/下架商品功能) ? 3.3 水平方向弹出菜单视图 弹出菜单HorizontalpopupView的具体代码 ?

    1.9K30

    vue使用elementui的el-menu的折叠菜单collapse

    由于我的是在el-menu所在组件外面的兄弟组件设置是否折叠的控制,我用事件总线bus进行是否折叠传递  参数 说明 类型 可选值 默认值 collapse 是否水平折叠收起菜单(仅在 mode...为 vertical 时可用) boolean — false background-color 菜单的背景色(仅支持 hex 格式) string — #ffffff text-color 菜单的文字颜色...index 作为 path 进行路由跳转 boolean — false 在左边的折叠菜单组件中,  <el-menu :default-active="$route.path...important; } .el-menu-vertical-demo { overflow-x: hidden; overflow-y: hidden; }  在右边的兄弟控制折叠菜单的组件中...,传值判断是否折叠 // 3、三元表达式改变折叠按钮的图标 this.flag = !

    1.1K10

    Fabric.js 右键菜单

    ---- PK创意闹新春,我正在参加「春节创意投稿大赛」,详情请看:春节创意投稿大赛 本文简介 Fabric.js 默认**没提供 鼠标右键事件**,只有 鼠标按键点击 、鼠标按键抬起 、鼠标移动 等事件...本文主要关注 Fabric.js 的主要 api 有: fireRightClick:允许右键点击 stopContextMenu:禁用默认右键菜单 mouse:down:鼠标点击事件 如果不知道 Fabric.js...的同学,可以看 《Fabric.js 从入门到___》 本案例是使用原生方式开发,不基于 Vue 、React 等框架,所以不用太担心运行环境等问题。...案例代码放了在文末~ 环境和版本 Chrome浏览器版本:96.0.4664.45 Fabric.js版本:4.6.0 思路 先说说需求: 右键单击元素,弹出菜单; 弹出菜单分4种情况(菜单在鼠标右侧...初始化画布,并生成图形 // 文档加载后执行 window.onload = function() { // 输出当前 fabric 版本 console.log(`Facrib.js

    7.1K10
    领券