js中的二级菜单怎么制作?

简介: js中的二级菜单怎么制作?

首先:

在 HTML 文件中,需要创建一个菜单容器元素,在该元素下创建一级菜单项元素,每个一级菜单项元素下面再添加二级菜单项元素。

在 CSS 文件中,通过给菜单项元素设置合适的样式来美化菜单的外观。

在 JavaScript 文件中,则需要实现菜单的交互效果,包括鼠标悬停/离开时的效果等

写好html

 

<ul id="menu">
  <li><a href="#">菜单1</a>
    <ul>
      <li><a href="#">菜单1-1</a></li>
      <li><a href="#">菜单1-2</a></li>
      <li><a href="#">菜单1-3</a></li>
    </ul>
  </li>
  <li><a href="#">菜单2</a>
    <ul>
      <li><a href="#">菜单2-1</a></li>
      <li><a href="#">菜单2-2</a></li>
    </ul>
  </li>
  <li><a href="#">菜单3</a></li>
</ul>

在该结构中,ul 元素的 id 属性被设置为 menu,该元素下是一些 li 元素,每个 li 元素又包含一个 a 元素和一个子菜单 ul 元素。其中,一级菜单项的 a 元素是可点击的超链接,而二级菜单项的 a 元素则只起到了文本展示的作用

加上css

#menu {
  list-style: none;
  margin: 0;
  padding: 0;
}
#menu > li {
  display: inline-block;
  margin-right: 10px;
  position: relative;
}
#menu > li > ul {
  display: none;
  position: absolute;
  top: 100%;
  left: 0;
  z-index: 1;
}
#menu > li:hover > ul {
  display: block;
}
#menu > li > ul > li {
  display: block;
  white-space: nowrap;
}
#menu > li > ul > li > a {
  display: block;
  padding: 5px;
  background-color: #eee;
  color: #333;
  text-decoration: none;
}
#menu > li > ul > li > a:hover {
  background-color: #ccc;
}

加上js

let menu = document.getElementById('menu');
menu.addEventListener('mouseover', function (e) {
  if (e.target.nodeName === 'LI') {
    var ul = e.target.querySelector('ul');
    if (ul) {
      ul.style.display = 'block';
    }
  }
});
menu.addEventListener('mouseout', function (e) {
  if (e.target.nodeName === 'LI') {
    let ul = e.target.querySelector('ul');
    if (ul) {
      ul.style.display = 'none';
    }
  }
});

其中:使用 document.getElementById('menu') 获取到菜单容器元素 ul

使用 menu.addEventListener('mouseover', ...) 给菜单容器添加鼠标悬停事件监听。

在事件处理函数中,首先需要判断当前鼠标滑过的元素是否是 li 元素,如果是,则找到该元素下的 ul 子元素并将其显示出来即可 你学会了吗?

相关文章
|
6月前
|
JavaScript 前端开发 容器
js怎么实现二级菜单
js怎么实现二级菜单
41 0
|
Web App开发 前端开发
HTML案例—很讨巧的一种js+css制作hover模式展示二级菜单方法
利用css减少js的逻辑使用 body { padding: 0; font-size: 10pt; behavior:url(css/csshover.
1076 0
|
前端开发 JavaScript 安全
JS-鼠标经过显示二级菜单
在css处添加了border样式为了看得更清楚——源代码有一个程序漏洞,存在一个很烦人的大bug。 1 2 3 一级菜单 4 5 6 ...
964 0
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
95 2
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的小区物流配送系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的小区物流配送系统附带文章源码部署视频讲解等
122 4
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的宠物援助平台附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的宠物援助平台附带文章源码部署视频讲解等
81 4
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的宠物交易平台附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的宠物交易平台附带文章源码部署视频讲解等
73 4
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的大学生入伍人员管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的大学生入伍人员管理系统附带文章源码部署视频讲解等
92 4
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp宿舍管理系统的附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp宿舍管理系统的附带文章源码部署视频讲解等
84 3
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的家政平台附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的家政平台附带文章源码部署视频讲解等
62 3