当前位置: 首页 > news >正文

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>

相关文章:

  • 【uniapp-兼容性处理】安卓uView组件中u-input后置插槽不展示
  • Vmware esxi 给现有磁盘增加空间后并扩展系统里磁盘空间
  • Redis 键管理
  • AI Agent认知框架(ReAct、函数调用、计划与执行、自问自答、批判修正、思维链、思维树详解和对比,最后表格整理总结
  • redis-7 安装
  • linux sysfs使用cat无显示的原因:返回值未赋值
  • 《深入解析C++中的explicit关键字:防止隐式转换的利器》
  • C语言main的参数;argc与argv
  • 开源键鼠共享软件的“爱恨情仇“:Deskflow、InputLeap与Barrier的演化史
  • Shell脚本-四则运算符号
  • spark基础介绍
  • Neowise Labs Contest 1 (Codeforces Round 1018, Div. 1 + Div. 2)(A~E)
  • 在Ubuntu 18.04下编译OpenJDK 11
  • 【每天一个知识点】主题建模(Topic Modeling)
  • NHANES指标推荐:PhenoAge
  • 【时时三省】(C语言基础)循环的嵌套和几种循环的比较
  • HarmonyOS:Navigation实现导航之页面设置和路由操作
  • 使用Unity Cache Server提高效率
  • 在线查看【免费】 dcm、drawio,dcm wps文件格式网站
  • 基于LangChain4J的AI Services实践:用声明式接口重构LLM应用开发
  • 江苏一季度实现地区生产总值3.3万亿元,同比增长5.9%
  • 2025年度“沪惠保”将于4月22日开售,保费不变
  • 马上评|机器人马拉松,也是具身智能产业的加速跑
  • 海南开展药品安全“清源”行动,严查非法渠道购药等违法行为
  • 2025年青年普法志愿者法治文化基层行活动启动
  • 龚桢梽任广东省发展和改革委员会副主任