…">
前端开发社区前端开发社区
  • 首页
  • VUE.js
  • React.js
  • HTML
  • CSS
  • JavaScript
  • PHP
  • jquery
  • Java
  • MySQL
  • uniapp
前端开发社区
当前位置:首页 > JavaScript

js 实现的收缩菜单

2026-04-04 07:50:39JavaScript

收缩菜单实现方法

HTML 结构 创建基础菜单结构,包含父级菜单项和子菜单列表:

<div class="menu">
  <div class="menu-item">
    <div class="menu-header">主菜单1</div>
    <ul class="submenu">
      <li>子项1</li>
      <li>子项2</li>
    </ul>
  </div>
</div>

CSS 样式 设置默认样式和收缩状态:

js 实现的收缩菜单

.submenu {
  max-height: 0;
  overflow: hidden;
  transition: max-height 0.3s ease-out;
}
.submenu.active {
  max-height: 200px;
}

JavaScript 逻辑 通过事件监听实现切换功能:

document.querySelectorAll('.menu-header').forEach(header => {
  header.addEventListener('click', () => {
    const submenu = header.nextElementSibling;
    submenu.classList.toggle('active');
  });
});

动画优化方案

使用 requestAnimationFrame 实现更流畅的动画效果:

js 实现的收缩菜单

function toggleMenu(element) {
  const start = Date.now();
  const duration = 300;

  function animate() {
    const elapsed = Date.now() - start;
    const progress = Math.min(elapsed / duration, 1);
    element.style.height = `${progress * 200}px`;

    if (progress < 1) {
      requestAnimationFrame(animate);
    }
  }

  requestAnimationFrame(animate);
}

多级菜单支持

递归处理子菜单 适应多层级结构:

function initMenu(container) {
  container.querySelectorAll('.menu-header').forEach(header => {
    header.addEventListener('click', (e) => {
      e.stopPropagation();
      const submenu = header.nextElementSibling;
      submenu.classList.toggle('active');
    });

    if(header.nextElementSibling) {
      initMenu(header.nextElementSibling);
    }
  });
}

键盘可访问性

添加键盘导航支持 符合无障碍标准:

menuItems.forEach(item => {
  item.addEventListener('keydown', (e) => {
    if (e.key === 'Enter' || e.key === ' ') {
      e.preventDefault();
      item.click();
    }
  });
});

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

相关文章

css制作tab菜单

css制作tab菜单

CSS制作Tab菜单的方法 HTML结构 使用无序列表和div容器构建基础结构,列表项为标签页标题,div内放置对应内容块。 <ul class="tab-menu"> <li…

js实现图表

js实现图表

在JavaScript中实现图表通常使用流行的图表库,以下是几种常见的方法和工具: 使用Chart.js Chart.js是一个简单灵活的库,适合快速生成响应式图表。安装方式包括CDN引入或npm安…

js实现二叉树

js实现二叉树

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

利用js实现

利用js实现

使用 JavaScript 实现 在 JavaScript 中,可以通过多种方式实现功能,具体取决于需求。以下是几种常见的方法: 方法一:使用原生 JavaScript // 示例代码 funct…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…

js实现滚动

js实现滚动

实现滚动效果的方法 在JavaScript中实现滚动效果可以通过多种方式完成,以下是一些常见的方法: 使用window.scrollTo() window.scrollTo()方法可以将页面滚动到指…

最新文章
  • java子类如何调用父类的方法

    2026-04-09 08:54:50

  • java如何定义一个类

    2026-04-09 08:51:25

  • java 如何四舍五入

    2026-04-09 08:49:47

  • java如何四舍五入

    2026-04-09 08:48:15

  • java如何输出数组中的数组

    2026-04-09 08:45:31

标签列表
  • vue (13931)
  • 原理 (626)
  • 分页 (603)
  • 跳转 (582)
  • 页面 (1094)
  • 路由 (650)
  • 列表 (473)
  • 功能 (1256)
  • 文件 (456)
  • 项目 (532)
  • 菜单 (444)
  • 组件 (1026)
  • 表格 (673)
  • 数据 (497)
  • 图片 (790)
  • js (4916)
  • 如何实现 (1693)
  • 效果 (625)
  • react (3311)
  • jquery (2238)
  • css (2728)
  • php (4572)
  • java (3021)
  • uniapp (1363)
  • elementui (828)

陕ICP备2023000799号  网站地图

Powered By Z-BlogPHP. Theme by TOYEAN.