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

用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.dtcms.com/a/357660.html

相关文章:

  • 高斯滤波的简介、C语言实现和实测
  • simd笔记
  • 嵌入式-定时器的从模式控制器、PWM参数测量实验-Day24
  • 命令拓展(草稿)
  • C++ 并发编程:全面解析主流锁管理类
  • 虚拟私有网络笔记
  • HDMI2.1 8K验证平台
  • websocket建立连接过程
  • 航电系统路径规划技术解析
  • C++Primer笔记——第六章:函数(下)
  • Python气象与海洋:安装入门+科学计算库+可视化+台风数据+WRF/ROMS后处理+EOF分析+机器学习
  • C++标准库断言头文件<cassert>使用指南
  • 告别音色漂移!微软超长语音合成模型VibeVoice正式开源​
  • Ubuntu磁盘分区重新挂载读写指南
  • 蓓韵安禧活性叶酸专利益生菌优生优选
  • 3D 数字孪生可视化技术在学校项目中的应用
  • AI 自动化编程 trae 体验3 开发小程序
  • 通过Kubernetes安装mysql5服务
  • Aha Moment——啊哈时刻!
  • ContextMenuManager for Win:优化右键菜单,解决用户痛点
  • Coze源码分析-API授权-编辑令牌-前端源码
  • 今天聊聊支付里的三个小概念:同名充值、非同代付和 D0。
  • NLP:驱动人工智能迈向 “理解” 与 “对话” 的核心引擎
  • 2025年06月 Scratch 图形化(一级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • 小杰机器视觉(five day)——直方图均衡化
  • five86: 1靶场渗透测试
  • 大模型应用开发笔记(了解篇)
  • Pytorch超分辨率模型实现与详细解释
  • Linux内核进程管理子系统有什么第三十八回 —— 进程主结构详解(34)
  • 叠叠问题解决