1.中止元素的动画:stop([cleanQueue, gotoEnd]):第一个参数表明是否要清空未执行完的动画队列,第二个参数表明是否直接将正在执行的动画跳转到末状态。动画
无参数stop():当即中止当前的动画,若是接下来还有动画则以当前状态开始接下来的动画。this
举例:为元素绑定hover事件以后,若是光标移入移出的速度太快,致使移入的动画还没执行完,就移出光标,则移出的动画效果就会被放到队列,等移入的动画完成后在执行。所以若是光标的移入移出速度太快,就会致使动画效果与移动光标不一致的状况。spa
此时若是在移入移出动画以前加入stop(),就能解决这个问题了。code
$("div").hover(function(){ $(this).stop().animate({"height":"300px", "width":"300px"}, 200); }, function(){ $(this).stop().animate({"height":"100px", "width":"100px"}, 200); });
若是遇到组合动画:对象
$("div").hover(function(){ $(this).stop().animate({"height":"300px"}, 200) /*若是在此时触发了光标的移出事件,将执行下边的动画,而非光标移出的动画,觉得stop()是当即中止当前的动画进入下一个动画。*/ .animate({"width":"300px"}, 200); }, function(){ $(this).stop().animate({"height":"100px"}, 200) .animate({"width":"100px"}, 200); });
此时须要用stop的第一个参数,设置为true,程序会把当前元素接下来还没有执行的动画队列都清空。blog
$("div").hover(function(){ $(this).stop(true).animate({"height":"300px"}, 200) /*若是在此时触发了光标的移出事件,会直接中止当前的动画,而且清空了后边的动画,这样就会执行光标移出的动画了。*/ .animate({"width":"300px"}, 200); }, function(){ $(this).stop(true).animate({"height":"100px"}, 200) .animate({"width":"100px"}, 200); });
第二个参数gotoEnd可让当前的动画直接达到结束时刻的状态,一般用于后一个动画须要基于前一个动画的末状态的状况。队列
stop(false, true) : 当前的动画直接达到末状态。事件
stop(true, true) : 当前的动画直接达到末状态并清空当前对象的动画队列。ci
注意:jQuery只能设置正在执行的动画的最终状态,不能直接达到未执行动画的最终状态。element
$("div").animate({"width" : "200px"}, 200) .animate({"height" : "200px"}, 200) .animate({"opacity", "0.2"}, 200);
不管怎么设置stop()值,均没法在改变"width"或者"height"时,将此div的元素末状态改成300*150大小,而且透明度0.2。既stop只能改变当前正在执行的动画。
2.判断元素是否处于动画状态:
在使用animate()方法的时候,要避免动画积累致使动画与用户行为不一致的状况,须要判断当前元素是否正在执行动画。
if(! $(element).is(":animated") ){ //判断元素是否处于动画状态 //若是当前元素没有执行动画,... }