停止元素的动画
如果需要在某处停止动画,需要使用stop()方法。结构
stop([clearQueue],[gotoEnd]])
两个参数都是可选的,且均为布尔值。
clearQueue:是否要清空未执行完的动画
gotoEnd:是否将未执行完的动画跳转到最终状态
如果直接使用stop(),则会立即停止当前正在进行的动画,如果接下来还有动画等待继续执行,则以当前状态开始接下来的动画。
举个例子:在移入、移出某元素时会分别触发动画1、动画2,在快速移入移出时,动画1在队列中可能还没有结束,因此不能立即进入动画2,这时就该用到stop()方法。
$(function(){
$("#cube").hover(function(){
$(this).stop()
.animate({left:"100px",opacity:"1"},500)//如果此时触发了光标移出事件,将会触发以下动画,而不是移出时所触发的动画
.animate({height:"100px"},500)
},
function(){
$(this).stop().animate({top:"40px",width:"100px"},500,function(){
$(this).css("border","5px solid blue")
})
})
})
此时,碰到组合动画不带参数的stop()就显得力不从心了。因为stop()只是停止正在进行的动画,当在向左移动的时候,光标移出,只能停止当前的动画,并继续进行下面改变高度的动画,而光标移出事件要等到改变高度的事件完成后再进行。
遇到这种情况,就要设置参数clearQueue为true,效果如下
第二个参数gotoEnd可以让正在执行的动画直接到达结束时刻的状态,通常用于后一个动画需要前一个动画的末状态的情况,可以设置stop(false,true),让当前动画直接到达末状态。设置stop(true,true),停止当前动画并直接到达未执行动画队列最终状态。
判断元素是否处于动画状态
在使用animate()时,要避免动画积累而到导致的动画与用户的行为不一致。当用户快速在某个元素上触发动画效果时,就会出现动画积累。解决的思路是判断元素是否正处于动画状态,如果不处于,则添加新的动画,否则不添加。
if(!$(element).is(:":animated")){//判断元素是否处于动画状态
//如果没有进行动画,则添加新动画
}
延迟动画
在动画执行过程中,如果想对动画进行延迟操作,使用delay()。
$(this).animate({left:"100px",opacity:"1"},500)
.delay(1000)
.animate({height:"100px"},500)
})
![演示效果](http://upload-images.jianshu.io/upload_images/3790386-e9c009c488c8842b.gif?imageMogr2/auto-orient/strip)