可伸缩关闭的JavaScript菜单是一种常见的用户界面元素,它允许用户通过点击或悬停来展开和折叠菜单项。这种设计可以提高用户体验,尤其是在空间有限或需要快速导航的情况下。
可伸缩菜单通常基于JavaScript和CSS实现。JavaScript负责处理用户的交互(如点击或悬停),而CSS则负责菜单的样式和动画效果。
以下是一个简单的点击展开/折叠菜单的示例:
<ul class="menu">
<li>
<a href="#" class="menu-item">菜单项 1</a>
<ul class="submenu">
<li><a href="#">子菜单项 1.1</a></li>
<li><a href="#">子菜单项 1.2</a></li>
</ul>
</li>
<li>
<a href="#" class="menu-item">菜单项 2</a>
<ul class="submenu">
<li><a href="#">子菜单项 2.1</a></li>
<li><a href="#">子菜单项 2.2</a></li>
</ul>
</li>
</ul>
.menu {
list-style: none;
padding: 0;
}
.menu-item {
display: block;
padding: 10px;
background-color: #f1f1f1;
cursor: pointer;
}
.submenu {
display: none;
list-style: none;
padding-left: 20px;
}
.submenu li a {
display: block;
padding: 8px;
}
document.addEventListener('DOMContentLoaded', function() {
const menuItems = document.querySelectorAll('.menu-item');
menuItems.forEach(item => {
item.addEventListener('click', function(e) {
e.preventDefault();
const submenu = this.nextElementSibling;
if (submenu.style.display === 'block') {
submenu.style.display = 'none';
} else {
submenu.style.display = 'block';
}
});
});
});
原因:缺少CSS过渡或动画属性。
解决方法:
.submenu {
display: none;
transition: max-height 0.3s ease-out;
max-height: 0;
overflow: hidden;
}
.menu-item.active + .submenu {
display: block;
max-height: 500px; /* 设置一个足够大的值 */
}
原因:<a>
标签的默认行为是导航到href
属性指定的URL。
解决方法: 在JavaScript中阻止默认行为:
item.addEventListener('click', function(e) {
e.preventDefault();
// 其他代码...
});
通过以上方法,你可以实现一个功能齐全且用户体验良好的可伸缩关闭的JavaScript菜单。
领取专属 10元无门槛券
手把手带您无忧上云