js制作简单的树形菜单 JavaScript制作树形菜单
树形菜单在Web开发中很常见,可以用于导航菜单、文件浏览器等功能。在本文中,我们将使用JavaScript来制作一个简单的树形菜单。
一、准备工作
在开始编写树形菜单之前,首先需要准备好HTML和CSS部分。我们可以使用一个无序列表(ul)和一些CSS样式来创建一个基本的树形结构。
```
/* 树形菜单样式 */
.tree,
.tree ul {
list-style: none;
margin: 0;
padding: 0;
}
.tree li {
margin: 0;
padding: 10px 5px;
position: relative;
}
.tree li::before,
.tree li::after {
content: '';
left: -20px;
position: absolute;
right: auto;
}
.tree li::before {
border-left: 1px solid #999;
bottom: 50px;
height: 100%;
top: 0;
width: 1px;
}
.tree li::after {
border-top: 1px solid #999;
height: 20px;
top: 25px;
width: 25px;
}
.tree li:only-child::before {
display: none;
}
.tree li:last-child::before {
height: 30px;
}
.tree li:last-child::after {
height: 20px;
top: -10px;
width: 25px;
}
/* 菜单项样式 */
.tree li a {
background-color: #f8f8f8;
border: 1px solid #ccc;
border-radius: 4px;
color: #333;
display: inline-block;
padding: 5px 10px;
text-decoration: none;
transition: all 0.2s ease-in-out;
}
.tree li a:hover,
.tree li a:focus {
background-color: #e8e8e8;
}
```
以上代码中,我们使用了一个无序列表和一些CSS样式来创建一个树形结构。菜单项均使用``````标签表示,并且通过嵌套``````和```
二、编写JavaScript代码
接下来,我们需要编写一些JavaScript代码来实现树形菜单的交互效果。具体的代码如下:
```
// 获取所有的菜单项
var menuItems document.querySelectorAll('.tree li');
// 遍历菜单项,并为每个菜单项添加点击事件
(menuItems, function (menuItem) {
// 查找当前菜单项下的子菜单
var subMenu menuItem.querySelector('ul');
// 如果当前菜单项有子菜单,则为菜单项添加一个可展开的图标
if (subMenu) {
// 创建一个可展开图标元素
var icon ('span');
'expand-icon';
// 为图标添加点击事件
('click', function () {
// 切换子菜单的显示状态
('expanded');
('expanded');
});
// 将图标插入到菜单项的第一个子元素位置
(icon, );
}
});
```
在以上代码中,我们首先使用```document.querySelectorAll('.tree li')```获取到所有的菜单项,并使用```()```遍历每个菜单项。然后,我们查找每个菜单项下的子菜单,并为拥有子菜单的菜单项添加一个可展开的图标。
通过为图标添加点击事件,我们可以切换子菜单的显示状态。具体做法是给子菜单添加一个名为「expanded」的CSS类,该类将修改子菜单的显示样式。
三、运行效果
经过上述准备工作和编写JavaScript代码,我们已经完成了一个简单的树形菜单。通过打开浏览器查看页面,并点击菜单项旁边的图标,我们可以看到子菜单的展开与收起效果。
到此,我们详细介绍了如何使用JavaScript制作一个简单的树形菜单。希望本文对你理解和应用树形菜单有所帮助。如果你有任何问题或建议,欢迎留言讨论。
参考链接:
- [MDN: HTML]()
- [MDN: CSS]()
- [MDN: JavaScript]()
作者:百度经验作者
来源:百度经验(链接)
版权声明:本文为原创文章,版权归作者所有。未经作者允许,不得转载。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。