当前位置:首页 > 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实现乘

JavaScript 实现乘法运算 在 JavaScript 中实现乘法运算可以通过多种方式完成,包括基本运算符、函数封装以及高级算法(如大数乘法)。以下是几种常见方法: 使用基本乘法运算符 Jav…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

js类实现

js类实现

使用类实现 JavaScript 功能 在 JavaScript 中,类(Class)是一种语法糖,基于原型继承机制。通过 class 关键字可以更直观地定义对象模板。 基本类定义 class…

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的JWT令牌…

css制作横向菜单

css制作横向菜单

使用 Flexbox 制作横向菜单 Flexbox 是制作横向菜单的现代方法,代码简洁且兼容性好。以下是一个基本实现: <nav class="horizontal-menu"> &…

js实现滑动

js实现滑动

实现滑动效果的方法 在JavaScript中实现滑动效果可以通过多种方式完成,以下是几种常见的实现方法: 使用CSS过渡和JavaScript触发 通过CSS定义过渡效果,JavaScript控制触…