使用原生 JavaScript 实现响应式多级下拉菜单(悬停与点击)

 使用原生 JavaScript 实现响应式多级下拉菜单(悬停与点击)

本文旨在指导开发者使用原生 JavaScript、HTML 和 CSS 创建一个响应式的多级下拉菜单。该菜单在桌面端通过鼠标悬停展开,而在移动端则通过点击展开。文章将提供完整的代码示例,并解释关键实现步骤,帮助读者理解如何根据屏幕尺寸切换交互方式,并解决子菜单无法正确显示的问题。### HTML 结构首先,我们需要定义 HTML 结构。使用 “ 和 “ 元素构建菜单,并使用 `

` 元素包裹整个菜单:“`html

为了更好地控制样式和语义,建议将顶级

标签内的文本包裹在 中,并将子菜单的 添加 class=”children”:

  • Link
    • Child Link
    • Child Link
  • CSS 样式

    接下来,使用 CSS 定义菜单的样式。关键点在于使用媒体查询来区分桌面端和移动端,并设置不同的交互方式。

    .menu {  --menu-height: 40px;  box-sizing: border-box;  position: fixed;  top: 0;  left: 0;  width: 100vw;}.menu ul {  list-style: none;  padding: 16px;  margin: 0;}.menu ul li,.menu ul li a {  opacity: 0.8;  color: #ffffff;  cursor: pointer;  transition: 200ms;  text-decoration: none;  white-space: nowrap;  font-weight: 700;}.menu ul li a,.menu ul li a a {  display: flex;  align-items: center;  height: 100%;  width: 100%;}.menu ul li {  padding-right: 36px;}.menu ul li::before {  content: "";  width: 0;  height: 0;  border-left: 5px solid transparent;  border-right: 5px solid transparent;  border-top: 5px solid #ffa500;  position: absolute;  right: 8px;  top: 50%;  transform: translateY(-50%);}.menu ul .link::before {  padding-right: 0;  display: none;}.menu > ul {  display: flex;  height: var(--menu-height);  align-items: center;  background-color: #000000;}.menu > ul li {  position: relative;  margin: 0 8px;}.menu > ul li ul {  visibility: hidden;  opacity: 0;  padding: 0;  min-width: 160px;  background-color: #333;  position: absolute;  top: 45px;  left: 50%;  transform: translateX(-50%);  transition: 200ms;  transition-delay: 200ms;}.menu > ul li ul li {  margin: 0;  padding: 8px 16px;  display: flex;  align-items: center;  justify-content: flex-start;  height: 30px;  padding-right: 40px;}.menu > ul li ul li::before {  width: 0;  height: 0;  border-top: 5px solid transparent;  border-bottom: 5px solid transparent;  border-left: 5px solid #ffa500;}.menu > ul li ul li ul {  top: -2%;  left: 100%;  transform: translate(0);}.show {  display: flex;}.hide {  display: none;}@media screen and (min-width: 1200px) {  .menu ul li:hover,  .menu ul li a:hover {    opacity: 1;  }  .menu > ul li ul li:hover {    background: black;  }  .menu > ul li:hover > ul {    opacity: 1;    visibility: visible;    transition-delay: 0ms;  }}@media screen and (max-width: 1200px) {  .menu {    height: 100vh;    top: 0;    left: 0;    width: 20vw;  }  .menu ul {    flex-direction: column;    height: 100vh;  }  .menu ul li {    margin: 1rem 0;  }  .menu ul li ul {    visibility: hidden;    opacity: 0;    padding: 0;    min-width: 160px;    background-color: #333;    position: absolute;    top: 0px;    left: 200%;    transform: translateX(-50%);    transition: 200ms;    transition-delay: 200ms;    height: fit-content;  }  .menu ul.show {    visibility: visible;    opacity: 1;  }}

    关键点:

    visibility: hidden; 和 opacity: 0;: 初始状态下,隐藏子菜单。@media screen and (min-width: 1200px): 桌面端媒体查询,使用 :hover 伪类显示子菜单。@media screen and (max-width: 1200px): 移动端媒体查询,调整菜单布局。.menu ul.show: 移动端点击后,设置 visibility: visible; 和 opacity: 1; 显示子菜单。这是解决子菜单不显示的关键。

    JavaScript 交互

    最后,使用 JavaScript 实现移动端的点击展开功能。

    let menu = document.querySelector(".menu ul");menu = menu.children;for (let i = 0; i < menu.length; i++) {  console.log(menu[i]);  menu[i].addEventListener("click", function() {    menu[i].firstElementChild.classList.toggle("show");    console.log(menu[i].firstElementChild);  });}

    这段代码遍历顶级菜单项,并为每个菜单项添加点击事件监听器。当点击菜单项时,切换其第一个子元素的 show 类。

    立即学习“Java免费学习笔记(深入)”;

    注意事项:

    确保 CSS 中定义了 .show 类,并设置了 visibility: visible; 和 opacity: 1;。这段代码假设子菜单是顶级菜单项的第一个子元素。如果结构不同,需要相应调整代码。这段代码只是一个基础示例,可能需要根据实际需求进行修改和扩展,例如添加关闭菜单的功能。

    总结

    通过以上步骤,我们就可以使用原生 JavaScript、HTML 和 CSS 创建一个响应式的多级下拉菜单,该菜单在桌面端通过鼠标悬停展开,而在移动端则通过点击展开。 关键在于使用媒体查询区分不同设备,并正确处理子菜单的显示和隐藏。

    
    

    以上就是使用原生 JavaScript 实现响应式多级下拉菜单(悬停与点击)的详细内容,更多请关注创想鸟其它相关文章!

    版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
    如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
    发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1575224.html

    (0)
    打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
    上一篇 2025年12月22日 16:58:00
    下一篇 2025年12月15日 10:31:39

    相关推荐

    • 使用 jQuery 在表格中根据条件显示状态信息

      本文介绍了如何在 jQuery 表格中,根据 interaction_search[i].status 的值,动态显示不同的状态文本。通过创建一个函数,将状态码映射到对应的文本,可以简化代码并提高可读性,避免在 HTML 模板中直接编写复杂的 if…else if… 语句。 …

      好文分享 2025年12月22日
      000
    • 实现反向模糊效果:从模糊到清晰的图片处理教程

      本文旨在指导开发者如何实现一个反向模糊效果,即图片初始状态是模糊的,随着滑块值的增加,图片逐渐变得清晰。我们将通过HTML、CSS和JavaScript代码示例,详细讲解如何设置初始模糊效果,并利用JavaScript动态调整模糊程度,从而实现从模糊到清晰的平滑过渡。 实现步骤 要实现反向模糊效果,…

      2025年12月22日
      000
    • 使用原生 JavaScript 实现响应式多级下拉菜单(悬停与点击切换)

      本文旨在指导开发者使用原生 JavaScript、HTML 和 CSS 构建一个响应式的多级下拉菜单。该菜单在桌面端通过鼠标悬停展开,在移动端则通过点击展开。文章将详细介绍实现思路、代码示例以及注意事项,帮助读者理解并掌握如何在不同设备上提供最佳的用户体验。 HTML 结构 首先,我们需要构建 HT…

      2025年12月22日
      000
    • HTML语义化:元素在网页结构中的核心作用与最佳实践

      本文深入探讨了HTML5中ain>元素的语义化作用及其在网页结构中的核心地位。它强调了使用来包裹页面主要内容的最佳实践,并将其与通用 进行对比,阐明了对提升网页可访问性、SEO友好性及代码可读性的重要意义。 理解 元素:核心内容标识 在html5中,语义化标签的引入旨在为网页内容赋予更明确的含…

      2025年12月22日 好文分享
      000
    • 纯 JavaScript 实现响应式多级下拉菜单:悬停与点击切换

      本文旨在指导开发者如何使用原生 JavaScript、HTML 和 CSS 构建一个响应式的多级下拉菜单。该菜单在桌面端通过鼠标悬停展开,而在移动端则通过点击展开,无需依赖任何外部库(如 jQuery)。文章将提供完整的代码示例,并详细解释实现思路和关键步骤,帮助读者理解并掌握这一常用的 Web 开…

      2025年12月22日
      000
    • 使用纯 JavaScript 实现响应式多级下拉菜单:悬停与点击的结合

      本文旨在指导开发者如何使用原生 JavaScript、HTML 和 CSS 构建一个响应式的多级下拉菜单。该菜单在桌面端采用悬停触发,而在移动端则切换为点击触发模式,无需依赖 jQuery 库。我们将重点解决移动端点击事件无法正确展开子菜单的问题,并提供代码示例和优化建议,帮助读者构建用户体验良好的…

      2025年12月22日
      000
    • 使用 Thymeleaf 动态渲染标签名称

      本文介绍了如何使用 Thymeleaf 动态渲染 HTML 标签的名称,例如根据模型属性动态生成 到 标签。虽然可以使用 th:utext 实现,但推荐使用 Thymeleaf 的片段功能,以提高代码可读性、降低出错风险,并避免潜在的安全问题。文章提供了具体的代码示例,展示了如何定义和使用片段来实现…

      2025年12月22日
      000
    • 使用 Thymeleaf 动态渲染 HTML 标签名称

      本文介绍了如何使用 Thymeleaf 动态生成 HTML 标签名称,例如根据模型属性动态生成 到 等标题标签。文章首先展示了一种使用 th:utext 的方法,但强调了其潜在的安全风险和可读性问题。随后,推荐使用 Thymeleaf 片段(Fragment)的方式来实现相同的功能,并提供了详细的代…

      2025年12月22日
      000
    • 使用 VBA 在网页表格中点击链接的正确方法

      本文将介绍如何使用 VBA 脚本在 Internet Explorer 中,通过表格结构定位并点击特定的 标签或按钮。我们将避免使用循环,而是利用 CSS 选择器直接定位目标元素,从而提高代码效率和可维护性。通过提供的示例代码,你将学会如何精准地操控网页元素,实现自动化操作。 使用 CSS 选择器定…

      2025年12月22日
      000
    • 使用 Thymeleaf 动态渲染 HTML 标签名

      本文介绍了如何在 Thymeleaf 模板中动态生成 HTML 标签名,根据模型属性值动态渲染 到 等标题标签。虽然可以使用 th:utext 实现,但推荐使用 Thymeleaf 片段(fragments)来提高代码可读性、可维护性,并降低安全风险。通过片段,可以更清晰地组织模板结构,避免直接在模…

      2025年12月22日
      000
    • 使用BeautifulSoup高效抓取嵌套标签的教程

      本教程详细介绍了如何使用Python的BeautifulSoup库,从复杂的HTML结构中高效提取多个嵌套的标签,特别是处理如面包屑导航这类重复性元素。通过定位父容器并结合find_all()方法进行迭代处理,您可以精确地抓取所需文本内容,并提供了清晰的代码示例和实用注意事项,以优化您的网页抓取任务…

      2025年12月22日
      000
    • 掌握JavaScript游戏触控事件:从键盘到触摸的平滑过渡

      本文旨在解决JavaScript游戏中将键盘事件转换为触控事件时常见的错误。通过分析e.code属性在不同事件类型中的适用性,我们将深入探讨touchstart事件的正确处理方式,并提供示例代码和最佳实践,确保您的游戏在移动设备上提供无缝的交互体验。 理解事件类型与事件对象属性 在开发javascr…

      2025年12月22日
      000
    • JavaScript游戏触控优化指南:从键盘事件到触摸事件的平滑过渡

      本教程旨在解决JavaScript游戏从键盘控制向触摸控制转换时常见的事件处理问题。通过分析一个Flappy Bird游戏的案例,我们深入探讨了touchstart事件与e.code属性的不兼容性,并提供了正确的事件监听和处理方法,确保游戏在移动设备上也能提供流畅的触控体验。文章还涵盖了事件类型区分…

      2025年12月22日
      000
    • JavaScript游戏触控优化:正确处理touchstart事件

      本文旨在指导开发者如何将JavaScript游戏从键盘控制转换为触控操作,重点解决touchstart事件处理中的常见误区。通过分析事件对象的特性,我们将纠正导致触控失效的关键代码逻辑,并提供优化后的实现示例及触控交互的最佳实践,确保游戏在移动设备上提供流畅的用户体验。 1. 从键盘到触控:事件处理…

      2025年12月22日
      000
    • 如何让你的 JavaScript 游戏支持触摸操作

      本文旨在解决 JavaScript 游戏中键盘事件到触摸事件的转换问题,以实现游戏在移动设备上的流畅运行。通过分析常见的触摸事件处理错误,提供正确的代码示例和详细的步骤说明,帮助开发者轻松地将键盘控制的游戏移植到触摸屏设备上,提升用户体验。 理解触摸事件 在将键盘控制的游戏转换为触摸控制时,首先需要…

      2025年12月22日
      000
    • 使你的 JavaScript 游戏支持触摸操作

      本文将指导你如何修改 JavaScript 游戏,使其能够响应触摸事件,从而在移动设备上获得更好的用户体验。我们将以一个 Flappy Bird 游戏的示例代码为例,详细讲解如何将键盘事件监听改为触摸事件监听,并解决可能遇到的问题。 触摸事件监听 在 JavaScript 中,我们可以使用 touc…

      2025年12月22日
      000
    • 解决Web按钮点击一次后失效的问题:使用toggle方法

      本文旨在解决Web开发中按钮点击一次后失效,需要刷新页面才能再次点击的问题。通过分析问题代码,我们将介绍如何使用JavaScript中的toggle方法来简化代码,并实现按钮的重复点击功能,避免手动添加和移除类名,从而更有效地控制元素的显示和隐藏。 在Web开发中,经常会遇到需要通过按钮控制页面元素…

      2025年12月22日
      000
    • JavaScript实现石头剪刀布游戏:事件驱动与AI逻辑优化

      本文旨在解决JavaScript石头剪刀布游戏中常见的AI选择不显示或逻辑未按预期执行的问题。我们将深入探讨事件驱动编程在Web游戏中的核心作用,并通过优化代码结构,展示如何正确地捕获玩家输入、动态生成AI选择,并实时更新游戏界面,从而构建一个功能完善且易于扩展的游戏。 理解问题:静态代码与动态交互…

      2025年12月22日
      000
    • 修复石头剪刀布游戏:解决AI选择不显示的问题

      本文旨在帮助开发者解决JavaScript石头剪刀布游戏中AI选择无法正确显示的问题。通过分析问题代码,我们将提供一种更简洁、更有效的方法来实现AI的选择逻辑,并确保其正确显示在页面上。我们将使用数组存储AI的选项,并通过随机数来选择AI的决策,从而避免潜在的逻辑错误。同时,我们将优化事件监听器的处…

      2025年12月22日
      000
    • Vue.js项目在无服务器环境下本地运行:单HTML文件打包与部署指南

      本教程旨在解决Vue.%ignore_a_1%项目在无Web服务器或离线环境下,通过直接打开index.html文件出现空白页的问题。我们将深入探讨默认Vue CLI构建失败的原因,并提供一种将所有Vue代码和资源打包成单个HTML文件的解决方案,从而实现项目在本地设备上的独立运行,无需依赖任何服务…

      2025年12月22日
      000

    发表回复

    登录后才能评论
    关注微信