固定菜单(Sticky Menu)是指当页面滚动时,菜单会固定在视口的某个位置(通常是顶部或底部),始终可见。分离菜单(Split Menu)通常指将菜单分成多个部分,可能包含主菜单和子菜单,或者在不同位置显示不同部分的菜单。
<!-- HTML 结构 -->
<nav class="main-menu">
<ul>
<li><a href="#home">首页</a></li>
<li><a href="#about">关于</a></li>
<li><a href="#services">服务</a></li>
<li><a href="#contact">联系</a></li>
</ul>
</nav>
<!-- 页面内容 -->
<div class="content">
<!-- 长内容... -->
</div>
/* 初始样式 */
.main-menu {
background: #333;
padding: 15px 0;
width: 100%;
transition: all 0.3s;
}
.main-menu ul {
list-style: none;
margin: 0;
padding: 0;
display: flex;
justify-content: center;
}
.main-menu li {
margin: 0 15px;
}
.main-menu a {
color: white;
text-decoration: none;
}
/* 固定后的样式 */
.main-menu.fixed {
position: fixed;
top: 0;
left: 0;
z-index: 1000;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}
// jQuery 实现固定效果
$(window).scroll(function() {
var scroll = $(window).scrollTop();
if (scroll >= 100) { // 滚动100px后固定
$('.main-menu').addClass('fixed');
} else {
$('.main-menu').removeClass('fixed');
}
});
<!-- 主菜单 -->
<nav class="primary-menu">
<ul>
<li><a href="#products">产品</a></li>
<li><a href="#solutions">解决方案</a></li>
<li class="has-submenu"><a href="#support">支持</a></li>
</ul>
</nav>
<!-- 分离的子菜单 -->
<div class="secondary-menu">
<ul>
<li><a href="#docs">文档</a></li>
<li><a href="#downloads">下载</a></li>
<li><a href="#contact-support">联系支持</a></li>
</ul>
</div>
.primary-menu, .secondary-menu {
background: #f5f5f5;
padding: 10px;
}
.secondary-menu {
display: none;
position: absolute;
width: 200px;
background: #fff;
box-shadow: 0 2px 5px rgba(0,0,0,0.2);
}
.has-submenu:hover .secondary-menu {
display: block;
}
// jQuery 控制分离菜单的显示/隐藏
$(document).ready(function() {
$('.has-submenu').hover(
function() {
$(this).find('.secondary-menu').stop(true, true).fadeIn(200);
},
function() {
$(this).find('.secondary-menu').stop(true, true).fadeOut(200);
}
);
});
原因:当菜单变为固定定位时,会从文档流中移除,导致下方内容突然上移。
解决方案:
/* 为固定菜单预留空间 */
.main-menu {
height: 60px; /* 与固定菜单高度相同 */
}
.main-menu.fixed + .content {
padding-top: 60px; /* 补偿固定菜单的高度 */
}
原因:hover 状态在触摸设备上不适用。
解决方案:
// 检测触摸设备并调整交互方式
if ('ontouchstart' in window) {
$('.has-submenu').on('click', function(e) {
e.preventDefault();
$(this).find('.secondary-menu').toggle();
});
}
原因:固定菜单的 z-index 设置不当或内容没有足够的顶部内边距。
解决方案:
.main-menu.fixed {
z-index: 1000; /* 确保足够高 */
}
.content {
padding-top: 80px; /* 大于菜单高度 */
}
通过以上方法,你可以灵活地在 jQuery 中实现各种固定和分离菜单效果,根据实际需求调整样式和交互行为。
没有搜到相关的文章