下面我将详细讲解使用JS实现一个简单的可折叠两级树形菜单的攻略。
下面我将详细讲解使用JS实现一个简单的可折叠两级树形菜单的攻略。
准备工作
首先,我们需要准备一些基本的html和css代码,用于渲染出菜单的样式和结构。下面是一个简单的示例结构:
<div class="menu">
<ul>
<li><a href="#">菜单1</a>
<ul>
<li><a href="#">子菜单1</a></li>
<li><a href="#">子菜单2</a></li>
<li><a href="#">子菜单3</a></li>
</ul>
</li>
<li><a href="#">菜单2</a>
<ul>
<li><a href="#">子菜单1</a></li>
<li><a href="#">子菜单2</a></li>
</ul>
</li>
<li><a href="#">菜单3</a>
<ul>
<li><a href="#">子菜单1</a></li>
<li><a href="#">子菜单2</a></li>
<li><a href="#">子菜单3</a></li>
<li><a href="#">子菜单4</a></li>
</ul>
</li>
</ul>
</div>
接下来,我们需要为菜单的展开和折叠添加样式。下面是一个简单的样式示例:
.menu li ul {
display: none;
}
.menu li.open ul {
display: block;
}
上述样式中,我们使用了CSS选择器来隐藏所有的子菜单,同时为展开状态的菜单添加了.open
类,用于显示对应的子菜单。
实现折叠展开功能
接下来,我们需要使用JS来实现菜单的折叠和展开功能。我们可以通过给菜单添加点击事件来实现这个功能。下面是一个简单的示例:
var menuItems = document.querySelectorAll(".menu > ul > li");
menuItems.forEach(function(menuItem) {
menuItem.addEventListener("click", function() {
this.classList.toggle("open");
});
});
上述代码中,我们首先使用document.querySelectorAll
方法来获取所有一级菜单。然后,我们对每个菜单项都添加了一个click
事件监听器,在点击菜单项时切换.open
类,实现菜单的折叠和展开。
绑定事件监听器
最后一步,我们需要确保菜单项的子菜单也能够折叠和展开。为此,我们需要在子菜单实际展开时,添加事件监听器。下面是一个示例代码:
var subMenuItems = document.querySelectorAll(".menu > ul > li > ul > li");
subMenuItems.forEach(function(subMenuItem) {
subMenuItem.addEventListener("click", function(event) {
event.stopPropagation();
});
});
上述代码中,我们首先使用document.querySelectorAll
方法来获取所有二级菜单项。然后,我们对每个子菜单项都添加了一个click
事件监听器,通过event.stopPropagation()
方法来阻止点击事件冒泡,确保子菜单项的点击行为不会触发父级菜单的折叠或展开行为。
示例说明
- 示例一:折叠展开菜单
上述示例中,展示了一个标准的两级菜单,使用了上述的HTML、CSS和JS代码进行实现。
- 示例二:多级折叠菜单
该示例展示了如何将上述的代码扩展到多级菜单,并添加了更多的样式以实现更好的视觉效果。
本文标题为:用JS做的简单的可折叠的两级树形菜单
基础教程推荐
- VBS一键配置VOIP脚本代码 2024-01-04
- 实现AJAX异步调用和局部刷新的基本步骤 2023-02-24
- 提升网站可访问性的CSS实践方法 2023-10-08
- 解决cocos creator UI弹窗穿透问题,遮罩屏蔽触发事件的处理 2022-10-29
- javascript – 如何从HTML表格中将数据插入mysql数据库 2023-10-26
- 表单上传功能实现 ajax文件异步上传 2023-02-14
- JS判断当前页面是否在微信浏览器打开的方法 2024-01-03
- 纯CSS实现网页内部锚点跳转时上下偏移的示例代码 2023-12-22
- vue项目地址上的#是哪来的?(前端路由的hash模式和history模式) 2023-10-08
- 创建与框架无关的JavaScript插件 2023-11-30