当前位置:首页 > JavaScript

用js实现下拉菜单

2026-04-04 09:51:56JavaScript

使用HTML和CSS创建基本结构

下拉菜单的基础是HTML结构。创建一个<select>元素,内部嵌套多个<option>元素作为选项:

<select id="dropdown">
  <option value="option1">选项1</option>
  <option value="option2">选项2</option>
  <option value="option3">选项3</option>
</select>

通过JavaScript增强交互

使用JavaScript监听change事件,获取用户选择的值:

用js实现下拉菜单

document.getElementById('dropdown').addEventListener('change', function() {
  console.log('选中的值:', this.value);
});

自定义样式下拉菜单

如果需要更复杂样式,可以用<div>模拟下拉行为:

用js实现下拉菜单

<div class="custom-dropdown">
  <button class="dropdown-toggle">选择选项</button>
  <ul class="dropdown-menu">
    <li data-value="option1">选项1</li>
    <li data-value="option2">选项2</li>
    <li data-value="option3">选项3</li>
  </ul>
</div>
.custom-dropdown {
  position: relative;
  display: inline-block;
}
.dropdown-menu {
  display: none;
  position: absolute;
  list-style: none;
  padding: 0;
  margin: 0;
}
.dropdown-menu li {
  padding: 8px 12px;
  cursor: pointer;
}
const toggle = document.querySelector('.dropdown-toggle');
const menu = document.querySelector('.dropdown-menu');

toggle.addEventListener('click', () => {
  menu.style.display = menu.style.display === 'block' ? 'none' : 'block';
});

document.querySelectorAll('.dropdown-menu li').forEach(item => {
  item.addEventListener('click', () => {
    toggle.textContent = item.textContent;
    menu.style.display = 'none';
    console.log('选中的值:', item.dataset.value);
  });
});

使用第三方库实现

对于更复杂需求,可以考虑使用Select2等库:

<select class="js-example-basic-single">
  <option value="AL">Alabama</option>
  <option value="WY">Wyoming</option>
</select>
$(document).ready(function() {
  $('.js-example-basic-single').select2();
});

无障碍访问考虑

确保下拉菜单可通过键盘操作:

toggle.addEventListener('keydown', (e) => {
  if (e.key === 'Enter' || e.key === ' ') {
    menu.style.display = menu.style.display === 'block' ? 'none' : 'block';
  }
});

每个实现方式适用于不同场景,简单需求使用原生<select>即可,需要高度定制时推荐自定义实现或使用成熟库。

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

相关文章

js实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

节流js实现

节流js实现

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

js实现视口

js实现视口

js实现视口检测的方法 使用JavaScript检测元素是否进入视口(viewport)可以通过Intersection Observer API或手动计算元素位置实现。以下是两种常见方法: Int…

js实现下拉菜单

js实现下拉菜单

使用HTML和CSS创建基础结构 HTML部分需要包含一个触发下拉的按钮和隐藏的下拉菜单内容: <div class="dropdown"> <button class="dr…