前端:实现二级菜单(点击实现二级菜单展开)

效果

代码

<!DOCTYPE html>
<html lang="en">

    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>左侧二级菜单实现</title>
    </head>
    <style>
    * {
        margin: 0;
        padding: 0;
    }

    /* 取消所有列表的序号 */
    ul,
    li {
        list-style-type: none;
    }

    /* 取消所有超链接的下划线 */
    a {
        text-decoration-line: none;
        color: white;
    }

    /* 全部样式 */
    .all_content {
        display: flex;
    }

    /* 左侧导航栏 */
    .left_nav {
        background-color: #222d32;
        width: 10%;
        height: 100vh;
    }

    /* 外层li */
    .menu-item {
        padding: 10px;
        background-color: #222d32;
    }

    .submenu {
        width: 100%;
        margin-top: 10px;
        margin-left: -10px;
        display: none;
        background-color: #181f23;
    }

    .submenu-li {
        background-color: #181f23;
        width: 100%;
        padding: 10px;
    }

    .submenu-link:hover {
        font-weight: 600;
    }

    .menu-item.active .submenu {
        display: block;
    }

    /* 右侧内容 */
    .right_content {
        width: 90%;
    }

    .content {
        display: none;
        /* 隐藏所有内容 */
    }

    .content.active {
        display: block;
        /* 显示被激活的内容 */
    }

    .selected {
        background-color:#4e73df;
        /* 设置选中状态的背景色 */
    }
</style>
    <body>
        <div class="all_content">
            <div class="left_nav">
                <ul class="menu">
                    <li class="menu-item">
                        <a href="#" class="menu-link">销售</a>
                        <ul class="submenu">
                            <li class="submenu-li"><a href="#"
                                    class="submenu-link"
                                    data-content-id="content1">功能1</a></li>
                            <li class="submenu-li"><a href="#"
                                    class="submenu-link"
                                    data-content-id="content2">报表1</a></li>
                        </ul>
                    </li>
                    <li class="menu-item">
                        <a href="#" class="menu-link">采购</a>
                        <ul class="submenu">
                            <li class="submenu-li"><a href="#"
                                    class="submenu-link"
                                    data-content-id="content3">功能2</a></li>
                            <li class="submenu-li"><a href="#"
                                    class="submenu-link"
                                    data-content-id="content4">报表2</a></li>
                        </ul>
                    </li>
                </ul>
            </div>
            <div class="right_content">
                <div id="content1" class="content">功能1的内容</div>
                <div id="content2" class="content">报表1的内容</div>
                <div id="content3" class="content">功能2的内容</div>
                <div id="content4" class="content">报表2的内容</div>
            </div>
        </div>
        <script>
        // 获取所有一级菜单项
        var menuItems = document.querySelectorAll('.menu-item');
        var contents = document.querySelectorAll('.content');

        // 为每个一级菜单项添加点击事件处理程序
        menuItems.forEach(function (menuItem) {
            var menuLink = menuItem.querySelector('.menu-link');
            var submenu = menuItem.querySelector('.submenu');

            menuLink.addEventListener('click', function (e) {
                e.preventDefault();
                // 关闭其他一级菜单的展开状态
                menuItems.forEach(function (item) {
                    if (item !== menuItem) {
                        item.classList.remove('active');
                    }
                });

                // 切换当前一级菜单的展开状态
                menuItem.classList.toggle('active');
            });
        });

        // 为每个二级菜单项添加点击事件处理程序
        var submenuLinks = document.querySelectorAll('.submenu-link');
        submenuLinks.forEach(function (link) {
            link.addEventListener('click', function (e) {
                e.preventDefault();
                // 移除所有内容的激活状态
                contents.forEach(function (content) {
                    content.classList.remove('active');
                });

                // 获取被点击项对应的内容ID
                var contentId = link.getAttribute('data-content-id');

                // 添加激活状态到对应的内容
                var activeContent = document.getElementById(contentId);
                activeContent.classList.add('active');

                // 关闭其他一级菜单的展开状态
                menuItems.forEach(function (menuItem) {
                    menuItem.classList.remove('active');
                });

                // 保持对应的一级菜单打开
                link.closest('.menu-item').classList.add('active');

                // 移除其他二级菜单的选中状态背景色
                submenuLinks.forEach(function (submenuLink) {
                    submenuLink.parentElement.classList.remove('selected');
                });

                // 给选中的二级菜单添加选中状态背景色
                link.closest('.submenu-li').classList.add('selected');
            });
        });
    </script>
    </body>

</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/203927.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

毕业设计单片机可以用万能板吗?

毕业设计单片机可以用万能板吗? 可以是可以&#xff0c;就是焊接起来比较麻烦&#xff0c;特别是有好几个重复连线点的时候&#xff0c;检测起来就不那么容易了&#xff0c;而且布线看起来乱糟糟的&#xff0c;如果后期一不小心把线弄断了&#xff0c;查起来就更麻烦了&#x…

深入了解Java8新特性-日期时间API之ZonedDateTime类

阅读建议 嗨&#xff0c;伙计&#xff01;刷到这篇文章咱们就是有缘人&#xff0c;在阅读这篇文章前我有一些建议&#xff1a; 本篇文章大概19000多字&#xff0c;预计阅读时间长需要10分钟以上。本篇文章的实战性、理论性较强&#xff0c;是一篇质量分数较高的技术干货文章&…

堆栈_删除字符串所有相邻重复项

//给出由小写字母组成的字符串 S&#xff0c;重复项删除操作会选择两个相邻且相同的字母&#xff0c;并删除它们。 // // 在 S 上反复执行重复项删除操作&#xff0c;直到无法继续删除。 // // 在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。 // // // // 示…

Java程序打包

File-Export,选择Java下的Runnable JAR file选项&#xff08;选择JAR file是不会运行的&#xff09;&#xff0c;next, 选择程序的入口类&#xff08;Launch configuration选项&#xff09;及导出位置&#xff0c;Finish即可。

人工智能驱动的医疗辅助:陪诊系统的技术原理与应用

随着人工智能技术的不断发展&#xff0c;医疗领域也迎来了新的可能性。本文将深入探讨陪诊系统的技术原理及其在医疗领域中的应用。我们将重点关注人工智能的核心概念&#xff0c;如自然语言处理、机器学习和语音识别&#xff0c;以解释陪诊系统是如何在医疗环境中发挥作用的。…

Vue的Nuxt项目部署在服务器,pm2动态部署和npm run build静态部署

Nuxt项目的部署有两种方式&#xff0c;一种是静态部署&#xff0c;一种是动态部署 静态部署需要关闭项目的ssr功能&#xff0c;动态部署则不需关闭&#xff0c;所以怎么部署项目就看你用不用ssr功能了 。 1.静态部署 先说静态部署&#xff0c;很简单&#xff0c;只需要在nuxt…

无限移动的风景 css3 动画

<style>*{margin:0;padding:0;/* box-sizing: border-box; */}ul{list-style: none;}#nav{width:900px;height:100px;border:2px solid rgb(70, 69, 69);margin:100px auto; overflow: hidden;}#nav ul{animation:moving 5s linear infinite;width:200%; /*怎么模拟动画…

量化误差的测量

因为转换的精度有限&#xff0c;所以将模拟值数字化时会不可避免地出现量化误差。量化误差由转换器及其误差、噪声和非线性度决定。当输入信号和计数器时基有区别时就会产生量化误差。根据输入信号的相位和计数器时基的匹配程度&#xff0c;计数器有下列三种可能性&#xff1a;…

嵌入式硬件电路设计

一、嵌入式硬件电路设计概述 随着物联网、人工智能技术的发展&#xff0c;我们的生活越来越智能化&#xff0c;信息化。智能手机&#xff0c;智能手环&#xff0c;智能锁&#xff0c;智能冰箱&#xff0c;自动驾驶&#xff0c;机器人等智能产品层出不穷&#xff0c;人类即将进入…

PSP - 解决 ESMFold 推理长序列蛋白质结构的显存溢出问题

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/134709211 使用 ESMFold 推理长序列 (Seq. Len. > 1500) 时&#xff0c;导致显存不足&#xff0c;需要设置 chunk_size 参数&#xff0c;实现长…

Vue大屏自适应终极解决方案

v-scale-screenv-scale-screen是一个大屏自适应组件&#xff0c;在实际业务中&#xff0c;我们常用图表来做数据统计&#xff0c;数据展示&#xff0c;数据可视化等比较直观的方式来达到一目了然的数据查看&#xff0c;但在大屏开发过程中&#xff0c;常会因为适配不同屏幕而感…

前端三大MV*模式:MVC、mvvm、mvp模式介绍

MVC&#xff08;同步通信为主&#xff09;&#xff1a;Model、View、Controller MVP(异步通信为主)&#xff1a;Model、View、Presenter MVVM(异步通信为主)&#xff1a;Model、View、ViewModel mvc模式介绍 MVC&#xff08;Model–View–Controller&#xff09;模式是软件…

C语言——编写程序,判断从键盘输入字符的类型(大写字母、小写字母、数字、其他四类)

#define _CRT_SECURE_NO_WARNINGS 1#include <ctype.h> #include <stdio.h> int main() { char c;printf("请输入一个字符: \n");scanf("%c",&c);if (isupper(c)) {printf("这是一个大写字母\n");} else if (islower(c)) {pr…

解决tomcat 启动 , 中文乱码问题

解决tomcat 启动 , 中文乱码问题. 第一步找到server.xml, 找到连接器, 添加 URIEncoding"UTF-8" 注意是英文的引号. 第二步, 找到 logging.properties , 在其中找到 第三步,启动服务, 观察现象,亲测有效.

社区内涝积水监测系统作用,改善社区积水

随着社区化进程的加速&#xff0c;社区基础设施的重要性日益凸显。在这个背景下&#xff0c;社区生命线和内涝积水监测系统成为了关注的焦点。它们在维护社区安全&#xff0c;特别是在应对暴雨等极端天气条件下&#xff0c;发挥着至关重要的作用。 WITBEE万宾时刻关注社区内涝积…

Cookie要怎么测试?

前言 Cookie是一种用于在web应用程序中存储用户特定信息的方法&#xff0c;可以让网站服务器把少量数据存储到客户端的硬盘或内存&#xff0c;或是从客户端的硬盘读取数据。Cookie的测试是指对Cookie的功能、性能、安全性、兼容性等方面进行验证的过程。 同时&#xff0c;在这…

arthas使用

官方文档 Github: https://github.com/alibaba/arthas 文档: https://arthas.aliyun.com/doc/ Arthas 是一款线上监控诊断产品&#xff0c;通过全局视角实时查看应用 load、内存、gc、线程的状态信息&#xff0c;并能在不修改应用代码的情况下&#xff0c;对业务问题进行诊断…

民安智库(第三方市场调查公司):专业调研引领某月饼生产商企业发展

在中国的传统佳节中&#xff0c;月饼是一种重要的节日食品&#xff0c;也是送礼的首选。某月饼生产商一直以来以其高品质、独特口味的月饼而备受消费者喜爱。为了更好地了解消费者对产品的满意度&#xff0c;该月饼生产商决定委托民安智库&#xff08;湖北知名满意度测评公司&a…

eBay需要添加什么卡可以付费?

前言 最近很多朋友不管是做eBay易贝卖家还是在eBay海淘下单购物的都或多或少遇到无法用卡付费的问题&#xff0c;甚至很多朋友之前明明可以用卡去付费&#xff0c;第一次可以第二次却不行了&#xff0c;想不到吧&#xff1f;这eBay平台还有这种骚操作&#xff0c;那到底用什么…

Spring-Mybatis源码解析--手写代码实现Spring整合Mybatis

文章目录 前言一、引入&#xff1a;二、准备工作&#xff1a;2.1 引入依赖2.2 数据源的文件&#xff1a;2.1 数据源&#xff1a; 2.3 业务文件&#xff1a; 三、整合的实现&#xff1a;3.1 xxxMapper 接口的扫描&#xff1a;3.2 xxxMapper 接口代理对象的生成&#xff1a;3.2 S…
最新文章