当前位置:首页 > 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样式:

js实现菜单折叠

.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控制代码:

js实现菜单折叠

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;
}

多级菜单实现

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

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
分享给朋友:

相关文章

css菜单制作

css菜单制作

基础水平菜单制作 使用无序列表<ul>和<li>标签构建结构,CSS设置横向排列: <ul class="horizontal-menu"> <li&g…

vue实现菜单调用

vue实现菜单调用

Vue 实现动态菜单调用的方法 使用路由配置生成菜单 在 Vue 项目中,可以通过路由配置自动生成菜单结构。路由配置通常包含 path、name、meta 等信息,这些信息可用于构建菜单项。 //…

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas…

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

js实现瀑布流

js实现瀑布流

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