首先:
在 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 子元素并将其显示出来即可 你学会了吗?