这是我的代码:
$(document).ready(function() {
//Left nav
$('#menu-left').children().addClass('closed');
$('#menu-left > li a').click(function(e){
e.preventDefault();
});
$('.closed').live('hover', function() {
var position_open = parseInt($(this).css('bottom')) + parseInt($('.sub-menu', this).css('height')) - 12;
$(this).animate({ bottom: position_open }, function() {
$(this).removeClass('closed');
$(this).addClass('opened');
});
});
$('.opened').live('hover', function() {
var position_close = parseInt($(this).css('bottom')) - parseInt($('.sub-menu', this).css('height')) + 12;
$(this).animate({ bottom: position_close }, function() {
$(this).removeClass('opened');
$(this).addClass('closed');
});
});
});
非常感谢任何帮助!
答案 0 :(得分:0)
您可以在调用animate之前尝试添加标记。像这样:
$(document).ready(function() {
var animating = false;
//Left nav
$('#menu-left').children().addClass('closed');
$('#menu-left > li a').click(function(e){
e.preventDefault();
});
$('.closed').live('hover', function() {
var position_open = parseInt($(this).css('bottom')) + parseInt($('.sub-menu', this).css('height')) - 12;
if(!animating) {
animating = true;
$(this).animate({ bottom: position_open }, function() {
$(this).removeClass('closed');
$(this).addClass('opened');
animating = false;
});
}
});
});
另外,请尝试删除其中一个悬停处理程序代码。似乎他们互相踩着。
答案 1 :(得分:0)
如果没有更多的测试,我无法确定,但我认为你的活动并没有像你期望的那样冒泡。当你还在徘徊/动画时,你正在添加/删除课程,所以这个过程会激活几次。
我建议重写函数来触发mouseenter / mouseleave事件,我想这可以帮助你确保事件只触发一次。您甚至不必使用此方法添加/删除类..
$(".slide_box").live('mouseenter', function () {
//animate up
})
$(".slide_box").live('mouseleave', function () {
//animate down
})