…">
前端开发社区前端开发社区
  • 首页
  • 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 样式 设置默认样式和收缩状态:

.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 实现更流畅的动画效果:

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

键盘可访问性

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

js 实现的收缩菜单

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

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

相关文章

vue.js实现轮播

vue.js实现轮播

vue.js实现轮播的方法 使用第三方库(如Swiper) 安装Swiper库: npm install swiper 在Vue组件中引入Swiper: <template>…

vue 菜单实现

vue 菜单实现

Vue 菜单实现方法 在Vue中实现菜单功能可以通过多种方式完成,以下是几种常见的实现方法: 使用v-for动态生成菜单 通过数据驱动的方式动态渲染菜单项,适合菜单内容可能变化的场景: <t…

css3结合js制作

css3结合js制作

CSS3 结合 JavaScript 制作动态效果 CSS3 和 JavaScript 结合可以实现丰富的动态效果,包括动画、交互和响应式设计。以下是几种常见的实现方式: CSS3 动画与 Java…

vue.js实现轮播

vue.js实现轮播

Vue.js 实现轮播功能 使用第三方库(推荐) Vue.js 生态中有许多成熟的轮播组件库,例如 vue-awesome-swiper 或 swiper,它们功能丰富且易于集成。 安装 swipe…

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document.…

vue 菜单实现

vue 菜单实现

Vue 菜单实现方法 基于路由的动态菜单 在 Vue 项目中,可以利用 Vue Router 实现动态菜单。首先定义路由配置,包含菜单所需的元信息(如标题、图标等)。 const routes =…

最新文章
  • js怎么实现图片切换

    2026-04-04 09:28:14

  • js实现页面自动刷新

    2026-04-04 09:26:22

  • 用js实现图片轮播

    2026-04-04 09:23:25

  • js实现手机滑动效果

    2026-04-04 09:21:51

  • js实现图片抖动效果

    2026-04-04 09:18: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.