当前位置:首页 > JavaScript

js实现菜单折叠

2026-04-04 06:18:19JavaScript

实现菜单折叠的JavaScript方法

使用JavaScript实现菜单折叠功能可以通过操作DOM元素的classListstyle属性来控制显示和隐藏。以下是几种常见方法:

基础DOM操作实现

通过切换CSS类或直接修改样式:

const menu = document.getElementById('menu');
const toggleBtn = document.getElementById('toggleBtn');

toggleBtn.addEventListener('click', () => {
  menu.classList.toggle('hidden'); // 切换CSS类
  // 或直接修改样式
  // menu.style.display = menu.style.display === 'none' ? 'block' : 'none';
});

对应的CSS样式:

.hidden {
  display: none;
}
/* 或使用过渡动画 */
.menu {
  transition: height 0.3s ease;
}
.menu.collapsed {
  height: 0;
  overflow: hidden;
}

使用数据属性跟踪状态

通过HTML5的data-*属性存储状态:

const menu = document.querySelector('[data-menu]');
const toggleBtn = document.querySelector('[data-toggle]');

toggleBtn.addEventListener('click', () => {
  const isExpanded = menu.dataset.expanded === 'true';
  menu.dataset.expanded = !isExpanded;
  menu.style.maxHeight = isExpanded ? '0' : '500px';
});

带动画效果的实现

使用CSS过渡实现平滑动画:

function toggleMenu() {
  const menu = document.querySelector('.menu');
  if (menu.style.maxHeight) {
    menu.style.maxHeight = null;
  } else {
    menu.style.maxHeight = menu.scrollHeight + 'px';
  }
}

响应式实现

结合媒体查询和JavaScript:

js实现菜单折叠

function checkScreenSize() {
  const menu = document.getElementById('menu');
  if (window.innerWidth < 768) {
    menu.classList.add('collapsible');
    menu.classList.remove('expanded');
  } else {
    menu.classList.remove('collapsible');
    menu.classList.add('expanded');
  }
}
window.addEventListener('resize', checkScreenSize);

注意事项

  • 确保为折叠元素设置overflow: hidden以避免内容溢出
  • 考虑添加ARIA属性增强可访问性:
    <button aria-expanded="false" aria-controls="menu">Toggle</button>
    <div id="menu" aria-hidden="true">...</div>
  • 移动端设备可能需要处理触摸事件
  • 对于复杂菜单,建议使用CSS transforms而不是height动画以获得更好性能

以上方法可以根据具体需求组合使用,现代前端框架如React/Vue通常会使用组件状态管理折叠状态,但核心原理仍然类似。

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

相关文章

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽功能。以下是核心代码逻辑: const draggableElement = document.…

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaSc…

js轮播图实现原理

js轮播图实现原理

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

vue实现左右菜单联动实现

vue实现左右菜单联动实现

Vue 实现左右菜单联动 数据绑定与状态管理 在 Vue 中实现左右菜单联动,核心是通过共享状态或事件通信实现数据同步。可以通过 Vuex 或组件间的 props/emit 机制管理联动状态。 //…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

vue elementui实现菜单

vue elementui实现菜单

使用 Vue 和 Element UI 实现菜单 Element UI 提供了 el-menu 组件,可以轻松实现导航菜单功能。以下是一个完整的实现示例: 安装 Element UI 确保项目已安装…