当前位置:首页 > JavaScript

js实现menu

2026-03-14 13:05:54JavaScript

JavaScript 实现菜单功能

使用 JavaScript 实现菜单功能通常涉及动态创建菜单项、处理点击事件以及控制菜单的显示与隐藏。以下是几种常见的实现方式:

动态创建下拉菜单

通过 JavaScript 动态生成下拉菜单结构,并添加事件监听器控制显示与隐藏。

js实现menu

// 获取菜单容器
const menuContainer = document.getElementById('menu-container');

// 菜单数据
const menuItems = [
  { text: '首页', link: '#' },
  { text: '产品', link: '#', subItems: [
    { text: '产品1', link: '#' },
    { text: '产品2', link: '#' }
  ]},
  { text: '关于我们', link: '#' }
];

// 生成菜单
function createMenu() {
  const ul = document.createElement('ul');
  ul.className = 'main-menu';

  menuItems.forEach(item => {
    const li = document.createElement('li');
    const a = document.createElement('a');
    a.href = item.link;
    a.textContent = item.text;
    li.appendChild(a);

    if (item.subItems) {
      const subUl = document.createElement('ul');
      subUl.className = 'sub-menu';
      item.subItems.forEach(subItem => {
        const subLi = document.createElement('li');
        const subA = document.createElement('a');
        subA.href = subItem.link;
        subA.textContent = subItem.text;
        subLi.appendChild(subA);
        subUl.appendChild(subLi);
      });
      li.appendChild(subUl);
    }

    ul.appendChild(li);
  });

  menuContainer.appendChild(ul);
}

// 初始化菜单
createMenu();

// 添加事件监听
document.querySelectorAll('.main-menu > li').forEach(li => {
  li.addEventListener('mouseenter', () => {
    const subMenu = li.querySelector('.sub-menu');
    if (subMenu) subMenu.style.display = 'block';
  });
  li.addEventListener('mouseleave', () => {
    const subMenu = li.querySelector('.sub-menu');
    if (subMenu) subMenu.style.display = 'none';
  });
});

响应式移动菜单

针对移动设备创建可折叠的汉堡菜单。

// 获取元素
const hamburger = document.querySelector('.hamburger');
const mobileMenu = document.querySelector('.mobile-menu');

// 切换菜单显示
hamburger.addEventListener('click', () => {
  mobileMenu.classList.toggle('active');
  hamburger.classList.toggle('is-active');
});

对应的 CSS 样式:

js实现menu

.hamburger {
  display: none;
  cursor: pointer;
}

.mobile-menu {
  display: none;
}

@media (max-width: 768px) {
  .hamburger {
    display: block;
  }

  .mobile-menu.active {
    display: block;
  }
}

上下文菜单实现

创建自定义右键上下文菜单。

// 创建上下文菜单
const contextMenu = document.createElement('div');
contextMenu.id = 'context-menu';
contextMenu.innerHTML = `
  <ul>
    <li data-action="copy">复制</li>
    <li data-action="paste">粘贴</li>
    <li data-action="delete">删除</li>
  </ul>
`;
document.body.appendChild(contextMenu);

// 显示/隐藏菜单
document.addEventListener('contextmenu', (e) => {
  e.preventDefault();
  contextMenu.style.display = 'block';
  contextMenu.style.left = `${e.pageX}px`;
  contextMenu.style.top = `${e.pageY}px`;
});

document.addEventListener('click', () => {
  contextMenu.style.display = 'none';
});

// 菜单项点击处理
contextMenu.querySelectorAll('li').forEach(item => {
  item.addEventListener('click', () => {
    const action = item.getAttribute('data-action');
    console.log(`执行操作: ${action}`);
    contextMenu.style.display = 'none';
  });
});

动画菜单效果

为菜单添加平滑的动画过渡效果。

// 获取菜单元素
const navMenu = document.querySelector('.nav-menu');
const menuItems = document.querySelectorAll('.nav-menu li');

// 添加悬停动画
menuItems.forEach(item => {
  item.addEventListener('mouseenter', () => {
    item.style.transform = 'translateY(-5px)';
    item.style.transition = 'transform 0.3s ease';
  });

  item.addEventListener('mouseleave', () => {
    item.style.transform = 'translateY(0)';
  });
});

// 菜单滑动效果
function toggleMenu() {
  navMenu.classList.toggle('open');
  if (navMenu.classList.contains('open')) {
    navMenu.style.maxHeight = `${navMenu.scrollHeight}px`;
  } else {
    navMenu.style.maxHeight = '0';
  }
}

这些实现方式涵盖了常见的菜单需求,可以根据具体项目要求进行调整和组合使用。

标签: jsmenu
分享给朋友:

相关文章

js实现复制

js实现复制

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

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

js实现类

js实现类

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

js轮播图实现原理

js轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:…

jquery js

jquery js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够更高…

js jquery

js jquery

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够…