jquery hover事件只触发一次动画
程序员文章站
2022-03-25 11:33:24
最近工作时遇到个关于动画的问题,如下: [javascript] view plain copy $("div").hover( function() { $(this).animate({"margin-top":"100px"},1000); }, function() { $(this).an ......
最近工作时遇到个关于动画的问题,如下:
[javascript] view plain copy $("div").hover( function() { $(this).animate({"margin-top":"100px"},1000); }, function() { $(this).animate({"margin-top":"200px"},1000); });
看代码就是一个简单的鼠标滑过的动画而已,但是当我测试的时候发现,当我发神经似的来回滑动时,事件就被触发了多次,动画也就重复了多次,怎么才能不重复出现,即动画过程中,鼠标滑过这个div,不会触发该事件那?
带着疑问,google之,
发现,原来为元素绑定hover事件之后,如果光标移入移出的速度太快,导致移入的动画还没执行完,就移出光标,则移出的动画效果就会被放到队列,等移入的动画完成后在执行。因此如果光标的移入移出速度太快,就会导致动画效果与移动光标不一致,出现重复出现的情况。
而解决办法有两种:
1、你可以使用jq的stop方法:
$(div).stop(false, true).animate({'margin-top':'100px'},1000);
如果stop()的第一个参数为true,表示立即清除当前的动画队列,默认为fx;如果第二个参数为true,表示立即将当前正在执行的动画置为它的结束状态。
延伸:(看来我真的得好好看看jq的api了)
停止元素的动画:stop([cleanQueue, gotoEnd]):第一个参数代表是否要清空未执行完的动画队列,第二个参数代表是否直接将正在执行的动画跳转到末状态。(可缺省)。
(1)无参数stop():立即停止当前的动画,如果接下来还有动画则以当前状态开始接下来的动画。
(2)stop(false, true) : 当前的动画直接达到末状态。
(3)stop(true, true) : 当前的动画直接达到末状态并清空当前对象的动画队列。
注意:jQuery只能设置正在执行的动画的最终状态,不能直接达到未执行动画的最终状态。
2、执行动画前判断一下:
if (!$(obj).is(':animated')) { // to do something }
推荐阅读
-
jQuery第一次运行页面默认触发点击事件的实例
-
Jquery input多选框 只在选中时触发事件,取消选中时不触发
-
jquery hover事件只触发一次动画
-
jQuery第一次运行页面默认触发点击事件
-
JQuery实现鼠标滑动多次,只触发一次响应事件
-
jquery事件hover、mouseenter、mouseleave只触发一次动画
-
jQuery.trigger()触发hover等事件问题的解决办法分享
-
JQuery入门——用one()方法绑定事件处理函数(仅触发一次)_javascript技巧
-
jQuery.trigger()触发hover等事件问题的解决办法分享
-
jQuery第一次运行页面默认触发点击事件