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

js实现简单三级菜单

基础概念

三级菜单通常指的是一个嵌套的导航结构,其中包含三个层级的菜单项。在前端开发中,这种结构可以通过HTML、CSS和JavaScript来实现。

相关优势

  1. 用户体验:清晰的层级结构有助于用户更好地理解和导航网站内容。
  2. 可维护性:使用模块化的方式编写代码,便于后期维护和扩展。
  3. 灵活性:可以根据需求动态地添加或删除菜单项。

类型

  • 静态菜单:菜单内容和结构在HTML中预先定义好。
  • 动态菜单:菜单内容和结构通过JavaScript动态生成。

应用场景

  • 电商网站:分类导航。
  • 企业官网:服务或产品分类。
  • 管理后台:功能模块导航。

实现示例

以下是一个简单的三级菜单的实现示例:

HTML

代码语言:txt
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>三级菜单示例</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <nav class="menu">
        <ul>
            <li>
                <a href="#">菜单1</a>
                <ul>
                    <li>
                        <a href="#">子菜单1-1</a>
                        <ul>
                            <li><a href="#">子菜单1-1-1</a></li>
                            <li><a href="#">子菜单1-1-2</a></li>
                        </ul>
                    </li>
                    <li><a href="#">子菜单1-2</a></li>
                </ul>
            </li>
            <li>
                <a href="#">菜单2</a>
                <ul>
                    <li><a href="#">子菜单2-1</a></li>
                    <li><a href="#">子菜单2-2</a></li>
                </ul>
            </li>
        </ul>
    </nav>
    <script src="script.js"></script>
</body>
</html>

CSS (styles.css)

代码语言:txt
复制
.menu ul {
    list-style: none;
    padding: 0;
    margin: 0;
}

.menu > ul > li {
    position: relative;
}

.menu ul ul {
    display: none;
    position: absolute;
    top: 0;
    left: 100%;
    background-color: #fff;
    box-shadow: 0 2px 5px rgba(0,0,0,0.2);
}

.menu li:hover > ul {
    display: block;
}

.menu a {
    display: block;
    padding: 10px;
    text-decoration: none;
    color: #333;
}

.menu a:hover {
    background-color: #f0f0f0;
}

JavaScript (script.js)

代码语言:txt
复制
document.addEventListener('DOMContentLoaded', function() {
    const menuItems = document.querySelectorAll('.menu > ul > li');

    menuItems.forEach(item => {
        item.addEventListener('mouseenter', function() {
            const subMenu = this.querySelector('ul');
            if (subMenu) {
                subMenu.style.display = 'block';
            }
        });

        item.addEventListener('mouseleave', function() {
            const subMenu = this.querySelector('ul');
            if (subMenu) {
                subMenu.style.display = 'none';
            }
        });
    });
});

可能遇到的问题及解决方法

问题1:菜单展开和收起不流畅

原因:可能是由于CSS过渡效果未设置或JavaScript事件处理不当。

解决方法

  • 添加CSS过渡效果:
  • 添加CSS过渡效果:
  • 确保JavaScript事件处理逻辑正确。

问题2:菜单在不同屏幕尺寸下显示异常

原因:可能是由于CSS媒体查询未设置或布局方式不适应响应式设计。

解决方法

  • 添加响应式设计的CSS媒体查询:
  • 添加响应式设计的CSS媒体查询:

通过以上示例和解决方法,可以实现一个简单且功能完善的三级菜单。

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

相关·内容

两、三级联动菜单,简单的实现(2)

在上一篇文章中两个联动菜单,简单的实现我写了一个插件,但是只支持两个链接,完好下支持二 、三级联动 /** * jQuery Linkage Menu * * Copyright 2014, sunyingyuan...* QQ: 1586383022 * Email: yingyuansun@163.com * * 二级/三级 联动菜单 * 支持二级或三级联动。...支持页面静态json和AJAX动态从后台获取值 * * 简单用法介绍: * HTML代码: * * 一级菜单默认显示名称...假设有三级菜单,同上 * * JS代码: * 引入jQuery和jquery.linkageMenu.js后 * 当中jquery.linkageMenu.js必须在jQuery之后引入 *...': '', //三级菜单option值 'selectOneParam': 'selectOneValue', //向后台获取二级菜单的值时,一级菜单的參数名称,默认是

2.1K20
  • java使用递归实现三级菜单

    java使用递归实现三级菜单 javaCopy codeimport java.util.*; public class Menu { private static Map<String...input.equals("back")) { System.out.println("请选择三级菜单(输入数字 1/2/3)或返回上一级(输入 back):");...菜单数据使用一个 Map 存储,键为一级菜单项,值为该菜单项下的二级菜单列表。 在 main 方法中调用 printMenu 方法开始执行程序。...如果用户选择了一个有效的二级菜单项,则调用 printSubSubMenu 方法打印该二级菜单项的三级菜单。 printSubSubMenu 方法同样循环等待用户输入三级菜单项或返回上一级。...在这个示例中,三级菜单项是固定的,因此只需要打印三个选项。如果用户选择了一个有效的三级菜单项,则显示所选项的信息。 在这个示例中,使用了递归方法来实现三级菜单的显示。

    1.5K60

    最简单的纯js实现点击展开二级菜单功能

    我最近就遇到做个点击展开二级菜单的要求,当然只能用原生的JS去写来实现,我借鉴了网上的一个案例,补充一下,分享一下: 如果,默认打开页面进来时二级菜单是隐藏的,需要点击才能展现二级菜单,再点击就是隐藏二级菜单...这里有两个点,实现展现和隐藏用display=”block“和display=”none”,另外就是要做一个判断,if else的判断当前是block还是none。 <!...li:hover{ cursor: pointer; } 一级菜单...2 二级菜单2 二级菜单2 二级菜单2 二级菜单2...如果,你的页面默认进来二级菜单是展现的,点击时才关闭。直接把style标签的样式display=”none”去掉就可以。同时需要修改一下js。

    4.3K20

    Python——三级菜单(字典+文件读写)

    三级菜单,按省、市、县三级做一个查询菜单,要求如下, 1.可逐级查询(比如输入山东省,跳出山东所有市,再输入青岛市,可展示青岛所有县) 2.输入b可以返回上一层,比如莱西一级,输入b返回上级青岛,再输入...这个是上上期的三级菜单的题目。...后来呢,又学了文件读写的章节,然后题目又延伸了一下,延伸内容如下: 1.将三级菜单存入文本文件中 2.展示省市县,数据存在文本中; 3.对菜单实现增删改,删、改容易理解,增么,就是用户增加一个城市...第3条中的增乍一看挺简单,琢磨一下,要处理文本,还有编码貌似挺复杂的。...parent_layers: current_layer = parent_layers.pop() else: print('目前为最上级菜单

    1.3K40
    领券