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

原生js 多级菜单

原生JavaScript实现多级菜单通常涉及到DOM操作、事件处理以及可能的递归逻辑。以下是关于原生JS多级菜单的基础概念、优势、类型、应用场景以及常见问题的解答:

基础概念

多级菜单指的是具有多级嵌套结构的菜单系统,用户可以通过点击或悬停等方式展开或收起子菜单。

优势

  1. 灵活性高:原生JS实现的多级菜单可以根据需求进行高度定制。
  2. 性能优化:避免了引入额外的库或框架,减少页面加载时间。
  3. 兼容性好:适用于各种浏览器环境。

类型

  1. 点击展开式:用户点击菜单项后展开子菜单。
  2. 悬停展开式:用户将鼠标悬停在菜单项上时展开子菜单。

应用场景

多级菜单常用于网站导航、后台管理系统等需要展示多层次结构信息的场景。

实现示例(点击展开式)

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

<script>
document.addEventListener('DOMContentLoaded', function() {
    const menuItems = document.querySelectorAll('#menu > li');

    menuItems.forEach(function(item) {
        item.addEventListener('click', function(event) {
            event.stopPropagation(); // 阻止事件冒泡
            const submenu = this.querySelector('.submenu');
            if (submenu) {
                submenu.style.display = submenu.style.display === 'block' ? 'none' : 'block';
            }
        });
    });
});
</script>

常见问题及解决方法

  1. 子菜单无法正常展开/收起
    • 确保事件监听器正确绑定到菜单项上。
    • 使用event.stopPropagation()阻止事件冒泡,避免触发父元素的事件处理程序。
    • 检查CSS样式,确保子菜单的初始状态和显示/隐藏逻辑正确。
  • 菜单在移动设备上不友好
    • 考虑使用媒体查询(Media Queries)来调整菜单在不同屏幕尺寸下的布局。
    • 实现响应式设计,使菜单在移动设备上能够以更适合的方式展示,如汉堡菜单等。
  • 菜单动画效果不流畅
    • 使用CSS过渡(Transitions)或动画(Animations)来实现平滑的展开和收起效果。
    • 优化JavaScript代码,减少DOM操作,提高性能。

通过原生JavaScript实现多级菜单需要一定的DOM操作和事件处理知识,但可以根据具体需求进行高度定制,提供良好的用户体验。

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

相关·内容

  • Vue 多级菜单的实现

    碰到的第一个难题就是多级菜单。 因为之前没做过,第一次做起来还是有点难的,最后实现的效果是这样。注意看地址栏。...难题一 CSS 的实现 多级菜单的收缩,展开都是使用 CSS 控制,所以要配合 Vue 传值判断是否 active 在父组件加入 activeItem 告诉子组件哪个索引是活跃的。...菜单由于考虑是多级的,所以我们需要封装成一个组件,并且需要使用组件的递归调用自身已实现多级。 父组件 在父组件中,我们可以使用这种形式来记录菜单数据。...他接受来自父组件的 items 数组,然后使用 v-for 渲染每一个子菜单(不是一级菜单,是多级菜单的递归渲染)。在父组件中,也通过 v-for 渲染一级菜单。...activeItem 是否等于 this.index js 1// methods 2handleClick () { 3 this.

    1.8K20

    vue elementui navmenu 多级导航菜单(水平、垂直)

    文章目录 vue elementui navmenu 多级导航菜单 路由跳转(一) 组件(NavMenu.vue) 调用(app.vue) 路由跳转(二) 水平效果图 区别 问题 1 刷新页面 2 非最后一层...,点击可跳转路由 3 水平菜单点击多路由时,有轮廓 4 刷新不折叠导航 5 水平菜单过长,可滚动 6 垂直菜单过长,可滚动 vue elementui navmenu 多级导航菜单 路由跳转(一) el-menu...-- 此菜单下还有子菜单 --> 菜单中有下拉菜单,并且超过页面宽度,会点不到,所以你设置的宽度要大于展开所有下拉的宽度。... git项目地址 在线演示地址 另一篇我的关于多级导航菜单的博客 elementui通过routerl配置多级导航菜单 发布者:全栈程序员栈长,转载请注明出处:https://

    7.5K20

    Flutter 组件集录 | MenuAnchor 与多级菜单

    前言 多级菜单在桌面端应用中非常常见,是很多应用程序中不可缺少的一环。它的价值在于: 将大量的交互操作事件进行归类, 通过弹框的形式,以极小的空间占用,实现大量功能。...那 Flutter 既然支持桌面端,那自然少不了对多级菜单的支持,菜单按钮的事件也往往伴随着快捷键的使用。...本文就来介绍一下基于 MenuAnchor 组件,如何实现弹出多级菜单,以及快捷键的使用: 1....SubmenuButton 实现多级菜单 在菜单条目列表中,可以通过 SubmenuButton 容纳多个子菜单项,效果如下: SubmenuButton( menuChildren: [...AppToolMenuBar,将菜单的点击事件回调给外界: 如下所示在代码中,菜单树的数据将通过 MenuEntry 列表来维护,只要在其中配置菜单按钮的信息即可。

    1.2K10

    拒绝重复代码,封装一个多级菜单、多级评论、多级部门的统一工具类

    一、介绍 你能看到很多人都在介绍如何实现多级菜单的效果,但是都有一个共同的缺点,那就是没有解决代码会重复开发的问题。如果我需要实现多级评论呢,是否又需要自己再写一遍?...在本文中,我将介绍如何使用SpringBoot创建一个返回多级菜单、多级评论、多级部门、多级分类的统一工具类。...多级节点的数据库大家都知道,一般会有id,parentId字段,但是对于tree_path字段,这个需要根据设计者来定。...如果你更关注写入操作的效率和数据一致性,并且树的深度不会很大,那么使用父评论ID字段来实现多级评论可能更简单和高效。

    8500
    领券