我正在创建一个带有一系列链接的水平菜单栏。在当前页面链接下方,有一个绝对定位的 div,其大小固定,背景为黑色。当任何其他链接悬停时,此“选择指示器”会滑到悬停链接下方。我已经设法根据需要创建了这种效果。
但是,当页面首次加载时,我遇到了“选择器”div 的位置问题。出于某种原因,div 将它的初始位置设置为它应该在的位置(在当前页面链接下方)的左边正好 5 个像素。我使用与动画本身相同的代码来初始化 div,并且该错误仅在加载页面时出现。只要将链接悬停在上方,“选择器”就会滑入正确的位置,直到页面被刷新/重新加载。
可以在www.jamiedavies.me找到菜单(和错误)的工作示例
这是我的导航栏的html结构:
<header>
<h1>Main Title</h1>
<nav id="mainNav">
<ul>
<li><a href="#1" title="Link1" class="current">Link1</a></li>
<li><a href="#2" title="Link2">Link2</a></li>
<li><a href="#3" title="Link3">Link3</a></li>
<li><a href="#4" title="Link4">Link4</a></li>
</ul>
</nav>
<div id="pageSelector"></div>
</header>
这是相关的CSS:
nav#mainNav {
position: absolute;
right: 0px;
top: 63px;
}
nav#mainNav ul li {
display: inline;
list-style-type: none;
margin-left: 35px;
}
div#pageSelector {
height: 5px;
left: -999px;
position: absolute;
top: 91px;
visibility: hidden;
width: 25px;
}
这是负责为选择器设置动画的 javascript/jquery 代码:
$( document ).ready( function() {
var offset = $( "header" ).offset().left;
$( "#pageSelector" ).css( "visibility", "visible" );
$( "#mainNav li" ).find( "a" ).each( function( i ) {
$( this ).mouseover( function( e ) {
var l = $( this ).offset().left - offset;
var w = $( this ).width();
$( "#pageSelector" ).animate( {
left: l,
width: w
}, 175, "swing" );
} );
} );
$( "#mainNav" ).mouseleave( function( e ) {
$( "#pageSelector" ).animate( {
left: $( "#mainNav li a.current" ).offset().left - offset,
width: $( "#mainNav li a.current" ).width()
}, 175, "swing" );
} );
$( "#mainNav" ).mouseleave();
} );