问题是正在使用幻灯片效果,因为<a>
幻灯片从左侧滑入并获得第二个.hover()
事件。我使用元素position:relative
在动画时从 jQueryUI 获得的事实来确定是否添加效果。
演示
添加 CSS
#menu a:hover {
background-color:white;
color:black;
}
并简单地使用.mouseenter()
$('#menu a').mouseenter(function() {
var $this = $(this);
if ($this.css('position') === 'relative') return;
$(this).effect('slide'); // EFFECT
});
似乎为我解决了。
编辑:感谢 Matthew 在评论中指出,当悬停在最右边时,事件仍然会触发多次。所以这是一个更新的答案。它使用较新的 jQuery.on()
语法,但您仍然可以使用较旧的方法来获得相同的结果。它现在使用两个事件,一个在锚点上添加悬停样式和效果,但前提是在进入锚点时,元素还没有类。悬停锚点时,我还会从所有其他锚点中删除悬停类。第二个事件涉及在退出整个菜单时删除悬停类。如果没有第二个事件,则离开菜单时悬停的最后一个锚点将留在.hover
班级中。
更新的演示
JavaScript
var $anchors = $('#menu a');
$('#menu').on('mouseenter', 'a', function() {
$anchors.not(this).removeClass('hover');
var $this = $(this);
if ($this.hasClass('hover')) return;
$this.addClass('hover').effect('slide'); // EFFECT
});
$('#menu').on('mouseleave', function() {
$anchors.removeClass('hover');
});
CSS
#menu {
background-color: black;
}
#menu a {
display: block;
color: white;
}
#menu a.hover {
background-color:white;
color:black;
}
HTML
<div id="menu">
<a href="#">Link 1</a>
<a href="#">Link 2</a>
<a href="#">Link 3</a>
</div>
希望这可以帮助。