我知道还有其他一些帖子可以解决这个问题,但我目前的问题有点不同。
我在元素上有两个事件 - mouseenter
和mouseleave
。第一个将我的元素的颜色改为光,另一个改回黑暗,这会产生闪烁的效果。
问题是,当我进出几次事件堆栈时,即使没有触发新事件,它也会闪烁很多次。我想阻止这一点,但.stop()
没有帮助。
这里有一个问题:我想触发1次闪光,无论是什么,但不超过1.因此,当某人进出时,事件mouseenter
将被触发,之后{ {1}}之后没有任何内容......直到触发了另一个输入/输出。
我想这可以通过在触发输入/输出之前锁定(不监听)新事件直到效果完成来实现,但我不知道怎么做而不解除绑定并再次绑定它。是不是有mouseleave
或其他什么?
答案 0 :(得分:1)
您是否已经使用过.stop(true)或.stop(true,true)?
答案 1 :(得分:1)
jQuery ":animated"
中有伪类
你可以在第一个mouseenter上使用它,就像:
if ( $(this).is(':animated')) {
return false;
}
防止其他动画
答案 2 :(得分:0)
您可以尝试设置bool var并仅在false时触发...
var anim = {
animating: false,
over: function(){
if(!anim.animating)
{
anim.animating = true;
// do you animation here
// and set your animating bool to false before calling outro...
$('#elem').animate({/*some css change*/ }, 1000, function(){
anim.animating = false;
anim.out();
});
}
},
out: function(){
if(!anim.animating)
{
anim.animating = true;
//do your outro animation here
$('#elem').animate({/*some css change*/ }, 1000, function(){
anim.animating = false;
});
}
}
};
然后让你的监听器调用anim.over和anim.out ......
$('#elem').on('mouseenter', function(){
anim.over();
}).on('mouseleave', function(){
anim.out();
});
这样你就可以在输入时调用动画,当介绍完成时它会自动触发outro动画。