当前位置:首页 > JavaScript

js实现菜单折叠

2026-03-01 05:41:50JavaScript

实现菜单折叠的JavaScript方法

使用JavaScript实现菜单折叠功能可以通过DOM操作和事件监听完成。以下是几种常见实现方式:

通过classList切换显示状态

const menuButton = document.querySelector('.menu-button');
const menuContent = document.querySelector('.menu-content');

menuButton.addEventListener('click', () => {
  menuContent.classList.toggle('hidden');
});

对应的CSS样式:

.hidden {
  display: none;
}

通过style属性直接修改

document.getElementById('toggleBtn').addEventListener('click', function() {
  const menu = document.getElementById('dropdownMenu');
  menu.style.display = menu.style.display === 'none' ? 'block' : 'none';
});

使用slide动画效果

function toggleMenu() {
  const menu = document.querySelector('.menu');
  menu.style.transition = 'all 0.3s ease';

  if (menu.style.height === '0px' || !menu.style.height) {
    menu.style.height = menu.scrollHeight + 'px';
  } else {
    menu.style.height = '0px';
  }
}

结合CSS过渡效果

HTML结构示例:

<button class="toggle-button">菜单</button>
<div class="collapsible-menu">
  <ul>
    <li>项目1</li>
    <li>项目2</li>
    <li>项目3</li>
  </ul>
</div>

JavaScript控制代码:

const button = document.querySelector('.toggle-button');
const menu = document.querySelector('.collapsible-menu');

button.addEventListener('click', () => {
  const isExpanded = menu.getAttribute('aria-expanded') === 'true';
  menu.setAttribute('aria-expanded', !isExpanded);
});

配套CSS样式:

.collapsible-menu {
  max-height: 0;
  overflow: hidden;
  transition: max-height 0.3s ease-out;
}

.collapsible-menu[aria-expanded="true"] {
  max-height: 500px;
}

多级菜单实现

对于多级嵌套菜单,可以使用事件委托:

js实现菜单折叠

document.querySelector('.menu-container').addEventListener('click', (e) => {
  if (e.target.classList.contains('submenu-toggle')) {
    e.preventDefault();
    const submenu = e.target.nextElementSibling;
    submenu.style.display = submenu.style.display === 'block' ? 'none' : 'block';
  }
});

注意事项

  • 确保为折叠元素添加适当的ARIA属性,如aria-expanded,增强可访问性
  • 移动端考虑添加触摸事件支持
  • 动画效果应使用CSS transition而非JavaScript定时器以获得更好性能
  • 对于复杂菜单,可以考虑使用detailssummaryHTML原生元素

以上方法可以根据具体需求进行组合和调整,实现不同风格的菜单折叠效果。

标签: 菜单js
分享给朋友:

相关文章

js实现轮播图

js实现轮播图

轮播图实现方法 基础HTML结构 <div class="slider"> <div class="slides"> <img src="image1.jpg…

js 实现vue模板

js 实现vue模板

实现 Vue 模板的 JavaScript 方法 通过原生 JavaScript 可以实现类似 Vue 的模板渲染功能,主要包括数据绑定、指令处理和模板解析。以下是核心实现思路: 数据绑定与…

js实现图片预览

js实现图片预览

使用FileReader API实现图片预览 通过FileReader对象读取用户选择的图片文件并显示预览: const input = document.getElementById('image…

css制作菜单

css制作菜单

CSS 制作菜单的方法 使用 CSS 可以制作多种风格的菜单,包括水平菜单、垂直菜单、下拉菜单等。以下是几种常见的实现方式。 水平菜单 水平菜单通常用于导航栏,可以通过 display: inlin…

js轮播图实现原理

js轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:CSS…

js实现瀑布流

js实现瀑布流

实现瀑布流布局 瀑布流布局是一种常见的网页布局方式,常用于图片展示、商品列表等场景。以下是使用 JavaScript 实现瀑布流布局的几种方法。 纯 JavaScript 实现 通过计算元素的位置和…