欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > JavaScript实现二级菜单

JavaScript实现二级菜单

2025/4/22 9:00:53 来源:https://blog.csdn.net/2301_76862031/article/details/147401353  浏览:    关键词:JavaScript实现二级菜单

二级菜单效果图

核心思路

使用div+css写好布局,然后通过javascript脚本语言 通过类名获取 myHeaderInfoStyle 

控制显示获取的子元素添加鼠标入事件,鼠标移出事件的 ,子菜单也是如此 

 布局文件代码

    <div class="myHeaderStyle">

        <div class="myHeaderInfoStyle">

            学校概况

        </div>

        <div class="myHeaderInfoStyle">

            国际合作

            <ul class="myChildren">

                <li class="myChildLiStyle">国际交流

                    <ul class="subMenu">

                        <li class="myChildUlLiStyle myliStyle">留校讲座</li>

                        <li class="myChildUlLiStyle myliStyle">合作院校</li>

                        <li class="myChildUlLiStyle myliStyle">交换申请</li>

                        <li class="myChildUlLiStyle myliStyle">交换申请</li>

                    </ul>

                </li>

                <li class="myChildLiStyle">一带一路</li>

                <li class="myChildLiStyle">孔子学院</li>

                <li class="myChildLiStyle">留学交换</li>

                <li class="myChildLiStyle">国际学院</li>

            </ul>

        </div>

        <div class="myHeaderInfoStyle">

            院系部门

        </div>

        <div class="myHeaderInfoStyle">

            招生就业

        </div>

        <div class="myHeaderInfoStyle">

            公共服务

        </div>

        <div class="myHeaderInfoStyle">

            校友工作

        </div>

    </div>

样式代码

    <style>

        body {

            margin: 0 auto;

            display: flex;

        }

        .myHeaderStyle {

            width: 100%;

            height: 50px;

            border: 0px solid rgb(118, 184, 243);

            background: rgb(17, 128, 240);

        }

        .myHeaderInfoStyle {

            display: inline-block;

            line-height: 50px;

            text-align: center;

            width: 200px;

            height: 100%;

            position: relative; /* 添加相对定位 */

        }

        .myHeaderInfoStyle:hover {

            background-color: chartreuse;

        }

        .myChildren {

            display: none;

            position: absolute; /* 添加绝对定位 */

            top: 100%; /* 位于父元素下方 */

            left: 0;

            background-color: rgb(24, 199, 155);

            list-style-type: none;

            padding: 0;

            margin: 0;

        }

        .myChildren li {

            display: block;

            padding: 5px 10px;

        }

        .myChildren li:hover {

            background-color: rgb(87, 247, 225);

        }

        .subMenu {

            display: none;

            position: absolute;

            top: 0;

            left: 100%; /* 位于父元素右侧 */

            background-color: rgb(21, 172, 243);

            list-style-type: none;

            padding: 0;

            margin: 0;

        }

        .subMenu li {

            display: block;

            padding: 5px 10px;

        }

        .subMenu li:hover {

            background-color: rgb(196, 245, 238);

        }

        .myliStyle{

            width: 200px;

            height: 50px;

            background: rgb(176, 205, 235);

        }

        .myChildLiStyle{

            width: 200px;

            height: 50px;

        }

    </style>

javaScript代码

    <script>

        // 获取所有 .myHeaderInfoStyle 元素

        let myHeaderInfoStyles = document.getElementsByClassName("myHeaderInfoStyle");

        // 遍历每个 .myHeaderInfoStyle 元素并添加鼠标悬停事件监听器

        for (let i = 0; i < myHeaderInfoStyles.length; i++) {

            const headerInfo = myHeaderInfoStyles[i];

            headerInfo.addEventListener("mouseover", function() {

                // 获取当前元素的 .myChildren 元素

                let myChildren = this.querySelector(".myChildren");

                myChildren.style.display = "block";

            });

            headerInfo.addEventListener("mouseout", function() {

                // 获取当前元素的 .myChildren 元素

                let myChildren = this.querySelector(".myChildren");

                myChildren.style.display = "none";

            });

        }

        // 获取所有 .myChildLiStyle 元素

        let myChildLiStyles = document.querySelectorAll(".myChildLiStyle");

        // 遍历每个 .myChildLiStyle 元素并添加鼠标悬停事件监听器

        myChildLiStyles.forEach(childLi => {

            childLi.addEventListener("mouseover", function() {

                // 获取当前点击元素的 .subMenu 元素

                let subMenu = this.querySelector(".subMenu");

                subMenu.style.display = "block";

            });

            childLi.addEventListener("mouseout", function() {

                // 获取当前点击元素的 .subMenu 元素

                let subMenu = this.querySelector(".subMenu");

                subMenu.style.display = "none";

            });

        });

    </script>

完整代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>body {margin: 0 auto;display: flex;}.myHeaderStyle {width: 100%;height: 50px;border: 0px solid rgb(118, 184, 243);background: rgb(17, 128, 240);}.myHeaderInfoStyle {display: inline-block;line-height: 50px;text-align: center;width: 200px;height: 100%;position: relative; /* 添加相对定位 */}.myHeaderInfoStyle:hover {background-color: chartreuse;}.myChildren {display: none;position: absolute; /* 添加绝对定位 */top: 100%; /* 位于父元素下方 */left: 0;background-color: rgb(24, 199, 155);list-style-type: none;padding: 0;margin: 0;}.myChildren li {display: block;padding: 5px 10px;}.myChildren li:hover {background-color: rgb(87, 247, 225);}.subMenu {display: none;position: absolute;top: 0;left: 100%; /* 位于父元素右侧 */background-color: rgb(21, 172, 243);list-style-type: none;padding: 0;margin: 0;}.subMenu li {display: block;padding: 5px 10px;}.subMenu li:hover {background-color: rgb(196, 245, 238);}.myliStyle{width: 200px;height: 50px;background: rgb(176, 205, 235);}.myChildLiStyle{width: 200px;height: 50px;}</style>
</head>
<body ><div class="myHeaderStyle"><div class="myHeaderInfoStyle">学校概况</div><div class="myHeaderInfoStyle">国际合作<ul class="myChildren"><li class="myChildLiStyle">国际交流<ul class="subMenu"><li class="myChildUlLiStyle myliStyle">留校讲座</li><li class="myChildUlLiStyle myliStyle">合作院校</li><li class="myChildUlLiStyle myliStyle">交换申请</li><li class="myChildUlLiStyle myliStyle">交换申请</li></ul></li><li class="myChildLiStyle">一带一路</li><li class="myChildLiStyle">孔子学院</li><li class="myChildLiStyle">留学交换</li><li class="myChildLiStyle">国际学院</li></ul></div><div class="myHeaderInfoStyle">院系部门</div><div class="myHeaderInfoStyle">招生就业</div><div class="myHeaderInfoStyle">公共服务</div><div class="myHeaderInfoStyle">校友工作</div></div><script>// 获取所有 .myHeaderInfoStyle 元素let myHeaderInfoStyles = document.getElementsByClassName("myHeaderInfoStyle");// 遍历每个 .myHeaderInfoStyle 元素并添加鼠标悬停事件监听器for (let i = 0; i < myHeaderInfoStyles.length; i++) {const headerInfo = myHeaderInfoStyles[i];headerInfo.addEventListener("mouseover", function() {// 获取当前元素的 .myChildren 元素let myChildren = this.querySelector(".myChildren");myChildren.style.display = "block";});headerInfo.addEventListener("mouseout", function() {// 获取当前元素的 .myChildren 元素let myChildren = this.querySelector(".myChildren");myChildren.style.display = "none";});}// 获取所有 .myChildLiStyle 元素let myChildLiStyles = document.querySelectorAll(".myChildLiStyle");// 遍历每个 .myChildLiStyle 元素并添加鼠标悬停事件监听器myChildLiStyles.forEach(childLi => {childLi.addEventListener("mouseover", function() {// 获取当前点击元素的 .subMenu 元素let subMenu = this.querySelector(".subMenu");subMenu.style.display = "block";});childLi.addEventListener("mouseout", function() {// 获取当前点击元素的 .subMenu 元素let subMenu = this.querySelector(".subMenu");subMenu.style.display = "none";});});</script>
</body>
</html>

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词