我正在用jQuery编写一些代码。
有一些div与课程' icon'在我的HTML中,我隐藏了一个div与课程'隐藏'在每个'图标旁边。
我希望当用户的鼠标进入'图标时,相应的“隐藏”#39;将制作动画。
但我发现如果我快速移动鼠标进出“图标”。动画将执行两次。它使我的网络视觉效果非常糟糕。
所以我想在制作动画时停止活动,我阅读了大量的文章和文档然后尝试,但仍然无法解决。
这是我的代码。
$(".icon").on("mouseenter", function(){
$(this).closest(".slideli").find(".hide").show("slide", {direction: 'right'}).animate({duration: 500, easing: "swing", queue: false});
});
$(".icon").on("mouseleave", function(){
$(this).closest(".slideli").find(".hide").hide("slide", {direction: 'right'}).animate({duration: 500, easing: "swing", queue: false});
});
答案 0 :(得分:0)
您应该使用jQuery的.stop()
来阻止新动画一直添加到队列中。您可以根据需要使用.stop(true,true)
或.stop(true,false)
:
.stop(true,false)
.stop(true,true)
以下是您改进的代码:
$(".icon").on("mouseenter", function(){
$(this)
.closest(".slideli")
.find(".hide")
.stop(true,true)
.show("slide", {direction: 'right'})
.animate({duration: 500, easing: "swing", queue: false});
});
$(".icon").on("mouseleave", function(){
$(this)
.closest(".slideli")
.find(".hide")
.stop(true,true)
.hide("slide", {direction: 'right'})
.animate({duration: 500, easing: "swing", queue: false});
});
您也可以使用.finish()
,但由于您的动画非常简单(您在任何情况下都没有链接连续的动画),.stop()
也可以执行相同的工作。
p / s:一篇关于处理我前一段时间发布的jQuery动画的快速文章的无耻插件:How to .stop() writing bad jQuery animations
答案 1 :(得分:0)
为避免在动画元素上触发事件,您应该使用伪选择器:animated
,如下所示::not(:animated)
$(".icon").on("mouseenter", function(){
$(this).closest(".slideli").find(".hide").filter(":not(:animated)").show("slide", {direction: 'right'}).animate({duration: 500, easing: "swing", queue: false});
});
$(".icon").on("mouseleave", function(){
$(this).closest(".slideli").find(".hide").filter(":not(:animated)").hide("slide", {direction: 'right'}).animate({duration: 500, easing: "swing", queue: false});
});