当前位置:首页 > JavaScript

js实现多个下拉菜单

2026-04-04 23:27:57JavaScript

实现多个下拉菜单的方法

使用JavaScript实现多个下拉菜单可以通过动态绑定事件或事件委托的方式完成。以下是两种常见实现方式:

动态绑定事件方式

HTML结构:

<div class="dropdown">
  <button class="dropdown-btn">菜单1</button>
  <div class="dropdown-content">
    <a href="#">选项1</a>
    <a href="#">选项2</a>
  </div>
</div>

<div class="dropdown">
  <button class="dropdown-btn">菜单2</button>
  <div class="dropdown-content">
    <a href="#">选项A</a>
    <a href="#">选项B</a>
  </div>
</div>

CSS样式:

js实现多个下拉菜单

.dropdown-content {
  display: none;
  position: absolute;
  background-color: #f9f9f9;
  min-width: 160px;
  box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
}

.dropdown-content a {
  display: block;
  padding: 12px 16px;
  text-decoration: none;
}

.dropdown-content a:hover {
  background-color: #f1f1f1
}

.show {
  display: block;
}

JavaScript代码:

const dropdowns = document.querySelectorAll('.dropdown');

dropdowns.forEach(dropdown => {
  const btn = dropdown.querySelector('.dropdown-btn');
  const content = dropdown.querySelector('.dropdown-content');

  btn.addEventListener('click', () => {
    content.classList.toggle('show');
  });
});

// 点击其他地方关闭下拉菜单
window.addEventListener('click', (e) => {
  if (!e.target.matches('.dropdown-btn')) {
    const contents = document.querySelectorAll('.dropdown-content');
    contents.forEach(content => {
      if (content.classList.contains('show')) {
        content.classList.remove('show');
      }
    });
  }
});

事件委托方式

HTML结构同上,JavaScript改用事件委托:

js实现多个下拉菜单

document.addEventListener('click', (e) => {
  // 点击按钮时切换对应下拉菜单
  if (e.target.classList.contains('dropdown-btn')) {
    const content = e.target.nextElementSibling;
    content.classList.toggle('show');
  }

  // 点击其他地方时关闭所有下拉菜单
  if (!e.target.matches('.dropdown-btn') && !e.target.matches('.dropdown-content a')) {
    const contents = document.querySelectorAll('.dropdown-content');
    contents.forEach(content => {
      content.classList.remove('show');
    });
  }
});

使用框架的实现方式

如果使用jQuery,代码会更简洁:

$(document).ready(function() {
  $('.dropdown-btn').click(function() {
    $(this).next('.dropdown-content').toggle();
  });

  $(document).click(function(e) {
    if (!$(e.target).closest('.dropdown').length) {
      $('.dropdown-content').hide();
    }
  });
});

注意事项

确保CSS中的定位正确,通常下拉内容使用position: absolute,父元素使用position: relative

考虑添加过渡动画效果提升用户体验:

.dropdown-content {
  transition: all 0.3s ease;
  opacity: 0;
  visibility: hidden;
}

.dropdown-content.show {
  opacity: 1;
  visibility: visible;
}

对于移动端设备,可能需要添加触摸事件支持,使用touchstart事件替代或补充click事件

标签: 多个菜单
分享给朋友:

相关文章

vue 菜单实现

vue 菜单实现

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

vue实现左右菜单

vue实现左右菜单

实现左右菜单的基本思路 使用Vue实现左右菜单通常需要两个主要组件:左侧的导航菜单和右侧的内容区域。左侧菜单负责导航功能,右侧区域根据菜单选择动态展示对应内容。 创建基本组件结构 在Vue项目中创建…

css制作二级菜单

css制作二级菜单

CSS制作二级菜单的方法 通过纯CSS实现二级菜单主要依赖HTML结构嵌套和CSS的:hover伪类选择器。以下是具体实现方式: HTML结构 <ul class="main-menu"&g…

vue实现悬浮菜单

vue实现悬浮菜单

实现悬浮菜单的基本思路 使用Vue实现悬浮菜单通常需要结合CSS定位和Vue的事件监听。核心是通过v-show或v-if控制菜单显隐,通过鼠标事件触发状态变化。 HTML结构示例 <t…

vue 实现多级菜单

vue 实现多级菜单

Vue 实现多级菜单的方法 递归组件实现 递归组件是处理多级菜单的常见方式,通过组件调用自身实现无限层级嵌套。 <template> <ul> <li v-…

vue实现多级菜单

vue实现多级菜单

Vue 实现多级菜单的方法 递归组件实现 递归组件是处理多级菜单的常见方式,通过组件调用自身实现无限层级嵌套。 <template> <ul> <li v-…