用html+js下拉菜单的demo,当鼠标点击后展开,鼠标点击别的地方后折叠

使用html + js实现下拉菜单demo,因为copy的网站菜单功能失效,就需要自己写一个逻辑,点击其他区域折叠菜单,可以参考:

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>折叠菜单 Demo</title><style>* {margin: 0;padding: 0;box-sizing: border-box;font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;}body {display: flex;flex-direction: column;align-items: center;justify-content: center;min-height: 100vh;background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);padding: 20px;}.container {width: 100%;max-width: 800px;text-align: center;}h1 {color: #2c3e50;margin-bottom: 30px;font-size: 2.5rem;text-shadow: 1px 1px 2px rgba(0,0,0,0.1);}.menu-container {background: white;border-radius: 10px;box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);overflow: hidden;margin-bottom: 30px;}.menu-item {border-bottom: 1px solid #eee;}.menu-item:last-child {border-bottom: none;}.menu-header {padding: 18px 20px;background: #3498db;color: white;cursor: pointer;display: flex;justify-content: space-between;align-items: center;transition: background 0.3s ease;}.menu-header:hover {background: #2980b9;}.menu-header.active {background: #2980b9;}.menu-content {padding: 0;background: #f8f9fa;max-height: 0;overflow: hidden;transition: max-height 0.4s ease, padding 0.4s ease;}.menu-content.active {max-height: 300px;padding: 20px;}.menu-content p {color: #555;line-height: 1.6;text-align: left;}.arrow {transition: transform 0.3s ease;}.arrow.active {transform: rotate(180deg);}.instructions {background: white;padding: 20px;border-radius: 10px;box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);margin-top: 20px;}.instructions h2 {color: #2c3e50;margin-bottom: 15px;}.instructions p {color: #555;line-height: 1.6;margin-bottom: 10px;}.highlight {background: #ffeaa7;padding: 2px 5px;border-radius: 3px;font-weight: 500;}</style>
</head>
<body><div class="container"><h1>折叠菜单 Demo</h1><div class="menu-container"><div class="menu-item"><div class="menu-header"><span>前端技术</span><span class="arrow">▼</span></div><div class="menu-content"><p>HTML、CSS 和 JavaScript 是现代前端开发的三大核心技术。HTML提供页面结构,CSS负责样式表现,JavaScript实现交互功能。近年来,前端框架如React、Vue和Angular极大地提高了开发效率。</p></div></div><div class="menu-item"><div class="menu-header"><span>后端开发</span><span class="arrow">▼</span></div><div class="menu-content"><p>后端开发主要涉及服务器、应用程序和数据库的交互。常见的后端语言包括Java、Python、PHP、Ruby和Node.js。后端开发需要关注数据存储、API设计、安全性和性能优化等方面。</p></div></div><div class="menu-item"><div class="menu-header"><span>移动开发</span><span class="arrow">▼</span></div><div class="menu-content"><p>移动应用开发主要有原生开发(iOS和Android)和跨平台开发(React Native、Flutter等)两种方式。移动开发需要特别考虑不同设备的屏幕尺寸、性能限制和用户体验。</p></div></div></div><div class="instructions"><h2>使用说明</h2><p>1. 点击<span class="highlight">菜单标题</span>可以展开或折叠内容</p><p>2. 点击<span class="highlight">页面其他区域</span>可以折叠所有已展开的菜单</p><p>3. 菜单展开时会有平滑的动画效果</p></div></div><script>document.addEventListener('DOMContentLoaded', function() {const menuHeaders = document.querySelectorAll('.menu-header');const menuContents = document.querySelectorAll('.menu-content');const arrows = document.querySelectorAll('.arrow');// 点击菜单标题的处理函数function toggleMenu(index) {// 切换当前菜单的激活状态const isActive = menuContents[index].classList.contains('active');// 关闭所有菜单menuContents.forEach(content => content.classList.remove('active'));menuHeaders.forEach(header => header.classList.remove('active'));arrows.forEach(arrow => arrow.classList.remove('active'));// 如果当前菜单原本不是激活状态,则激活它if (!isActive) {menuContents[index].classList.add('active');menuHeaders[index].classList.add('active');arrows[index].classList.add('active');}}// 为每个菜单标题添加点击事件menuHeaders.forEach((header, index) => {header.addEventListener('click', function(e) {e.stopPropagation(); // 阻止事件冒泡toggleMenu(index);});});// 点击页面其他区域时关闭所有菜单document.addEventListener('click', function() {menuContents.forEach(content => content.classList.remove('active'));menuHeaders.forEach(header => header.classList.remove('active'));arrows.forEach(arrow => arrow.classList.remove('active'));});// 阻止菜单内容区域的点击事件冒泡menuContents.forEach(content => {content.addEventListener('click', function(e) {e.stopPropagation();});});});</script>
</body>
</html>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV 核心技术:颜色检测与几何变换实战

在计算机视觉任务中&#xff0c;颜色空间转换和图像几何变换是两大基础且高频的操作 —— 前者用于精准分割特定颜色目标&#xff08;如交通信号灯、物体追踪&#xff09;&#xff0c;后者用于调整图像的尺寸、位置和视角&#xff08;如文档矫正、图像拼接&#xff09;。本文将…

[HFCTF2020]EasyLogin

文章目录TRYWP总结TRY 注册admin报错username wrong。 随便注册一个用户点击GetFlag&#xff0c;permission deny。 猜测可能是需要admin权限。 看cookie发现有&#xff1a; sses:aok&#xff1a;eyJ1c2VybmFtZSI6ImEiLCJfZXhwaXJlIjoxNzU2NDU1NjczMTAxLCJfbWF4QWdlIjo4NjQwM…

Java接口和抽象类的区别,并举例说明

Java接口和抽象类是面向对象编程中实现抽象的两种机制&#xff0c;它们在语法、设计目的和使用场景上有显著区别&#xff1a;一、核心区别‌定义方式‌抽象类&#xff1a;使用abstract class声明&#xff0c;可包含抽象方法和具体方法45。接口&#xff1a;使用interface声明&am…

docker-相关笔记

1: 导入镜像 docker load -i myimage.tar# 导出镜像 docker save myimage:latest > myimage.tar # 导入镜像 docker load -i myimage.tardocker load -i <文件> 功能&#xff1a;用于导入通过 docker save 命令导出的镜像归档文件&#xff08;通常是 .tar 格式&#…

自然语言提取PDF表格数据

自然语言提取PDF表格数据PDF v8.2的文档解决方案与OpenAI实现了无缝的AI集成&#xff0c;可将非结构化PDF转换为可用数据。MESCIUS 推出的 PDF 文档解决方案 (DsPdf) 是一款软件开发工具包&#xff0c;它提供了 .NET Core 库和一个 JavaScript PDF 查看器&#xff0c;用于处理和…

飞牛Nas每天定时加密数据备份到网盘,基于restic的Backrest笔记分享

1. 前言 受前辈“RAID≠备份”的经验&#xff0c;也考虑到硬盘故障时 RAID 重建步骤繁琐&#xff0c;我干脆放弃阵列&#xff0c;直接单盘运行。 重要数据则加密后上传至大厂云盘&#xff1a;一方面文件对外不可读&#xff0c;规避扫描和谐&#xff1b;另一方面依靠大厂的数据安…

C#连接SQL-Server数据库超详细讲解以及防SQL注入

C#连接SQL Server数据库完整指南&#xff0c;整合了ADO.NET原生连接与Entity Framework Core两种实现方式。这篇文件详细介绍C#代码连接数据库的通用操作数据库链接功能 数据库的增删改查操作1 配置全局数据库链接字符串 App.config2 获取数据库链接字符串先在App.config配置连…

Pico2‑ICE FPGA 开发板:从开箱到跑通示例的全历程

FPGA 和 MCU 结合的开发板不多&#xff0c;而 Pico2‑ICE 则把小巧、灵活和易上手完美结合。搭载 RP2350 双核 RISC-V MCU Lattice iCE40UP5K FPGA&#xff0c;配合官方 SDK&#xff0c;你可以一步步跑通各种示例&#xff0c;从 LED 到 VGA&#xff0c;再到 MCU 与 FPGA 协作应…

Java图形图像处理【Swing图像拖拽】【五】

Java图形图像处理【Swing图像拖拽】 18.3.3 Swing图像对象拖拽功能 18.3.3 Swing图像对象拖拽功能 上文讨论的是java.awt.dnd包中提供的拖拽API接口&#xff0c;也可称之为AWT组件的拖拽功能。下面我们要讨论的是Swing框架的拖拽功能&#xff1a;Swing组件也提供了对拖拽功能的…

状态模式与几个经典的C++例子

1. 状态模式定义与核心思想 状态模式解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。通过将状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。 核心思想: 状态抽象:将对象的每个状态都封装到一个独立的类中。 委托代替条件判断:…

SyncBackPro 备份及同步软件中的脚本功能简介

脚本提供了一种灵活而简单的方法来自动执行任务和扩展应用程序的功能。脚本是一个小程序&#xff0c;能够自定义和控制备份作业。例如&#xff0c;用户可以编写脚本来复制、重命名或删除特定文件、自定义用户界面或更改配置文件设置。SyncBackPro 的脚本功能类似于 Microsoft O…

部署2.516.2版本的jenkins,同时适配jdk8

&#x1f4cc; 前言 在企业级开发中&#xff0c;我们常常面临 新老项目并存 的复杂局面&#xff1a; 老项目基于 JDK 8 开发&#xff0c;短期内无法升级&#xff1b; 新项目采用 JDK 17&#xff08;LTS&#xff09;甚至更高版本&#xff1b; 而作为 CI/CD 核心的 Jenkins&#…

Autodesk Maya 2026.2 全新功能详解:MotionMaker AI 动画、LookdevX 材质增强、USD 工作流优化

软件介绍 Autodesk Maya 2026.2是一款专业的3D计算机图形软件&#xff0c;它为数字内容创作者提供了丰富的工具集&#xff0c;以实现高质量的建模、动画、模拟和渲染。该版本带来了多项性能优化和工作流程改进&#xff0c;特别是针对生成式动画工具MotionMaker进行了重大升级&…

STM32之DMA详解

一、DMA 1. DMA的引入 在嵌入式系统或计算机系统中&#xff0c;数据的传输和处理是非常重要的操作。以下通过一个简单的示例来展示传统数据操作方式与 DMA 引入的必要性&#xff1a; int a 10; int b 20;a b;上述代码包含了变量定义、初始化以及变量数据赋值操作。在传统…

链表有环找入口节点原理

环形链表入口检测算法数学解释 数学原理假设定义: 链表头到环入口的距离为 a环入口到相遇点的距离为 b相遇点到环入口的距离为 c环的长度为 b c第一次相遇时: 慢指针走了 s a b 步快指针走了 f a b n(b c) 步&#xff0c;其中 n 是快指针在环内转的圈数由于快指针速度是…

Java 基本类型与包装类详解

Java 基本类型与包装类详解 在 Java 开发中&#xff0c;理解 基本数据类型与包装类、字符串处理、以及高精度计算类是非常核心的能力。这不仅关系到程序性能&#xff0c;还影响代码的正确性和可维护性。本文将详细讲解这些知识点&#xff0c;并给出常见的使用技巧和陷阱。 1️…

CRYPT32!CryptMsgUpdate函数分析之CRYPT32!PkiAsn1Decode函数的作用是得到pci

第一部分&#xff1a; CryptMsgUpdate( #endifIN HCRYPTMSG hCryptMsg,IN const BYTE *pbData,IN DWORD cbData,IN BOOL fFinal) {ContentInfo *pci NULL;if ((PHASE_FIRST_FINAL pcmi->dwPhase) &&(0 pcmi->dwMsgType)) {if (0 …

华为交换机S5700设置acl

1.、配置ACL1.1、定义允许的ACL规则[sw1]acl number 3001[sw1-acl-adv-3001]rule permit ip source 192.168.20.0 0.0.0.255 destination 192.168.40.1 0[sw1-acl-adv-3001]rule permit ip source 192.168.30.0 0.0.0.255 destination 192.168.40.1 01.2、定义禁止的ACL规则[sw…

在使用spring ai进行llm处理的rag的时候,选择milvus还是neo4j呢?

在使用spring ai进行llm处理的rag的时候&#xff0c;选择milvus还是neo4j呢&#xff1f; 对于Spring AI中的RAG&#xff08;Retrieval-Augmented Generation&#xff09;应用&#xff0c;选择Milvus还是Neo4j&#xff0c;主要取决于你的数据类型以及RAG流程中对数据检索的侧重点…

计算机视觉与深度学习 | 视觉里程计技术全景解析:从原理到前沿应用

视觉里程计技术全景解析:从原理到前沿应用 一、定义与核心价值 二、技术原理与分类体系 2.1 基本工作流程 2.2 主流技术路线对比 2.3 算法范式演进 三、典型应用场景 3.1 地面移动机器人 3.2 自动驾驶领域 3.3 深空探测 3.4 增强现实 四、核心技术挑战与突破路径 4.1 主要技术…