锋利的jQuery-4--停止动画和判断是否处于动画状态(防止动画加入队列过多的办法)

1.停止元素的动画:stop([cleanQueue, gotoEnd]):第一个参数代表是否要清空未执行完的动画队列,第二个参数代表是否直接将正在执行的动画跳转到末状态。

无参数stop():立即停止当前的动画,如果接下来还有动画则以当前状态开始接下来的动画。

举例:为元素绑定hover事件之后,如果光标移入移出的速度太快,导致移入的动画还没执行完,就移出光标,则移出的动画效果就会被放到队列,等移入的动画完成后在执行。因此如果光标的移入移出速度太快,就会导致动画效果与移动光标不一致的情况。

此时如果在移入移出动画之前加入stop(),就能解决这个问题了。

$("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,程序会把当前元素接下来尚未执行的动画队列都清空。

$("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) : 当前的动画直接达到末状态并清空当前对象的动画队列。

注意:jQuery只能设置正在执行的动画的最终状态,不能直接达到未执行动画的最终状态。

$("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") ){   //判断元素是否处于动画状态
  //如果当前元素没有执行动画,...
}
时间: 2024-08-25 03:22:16

锋利的jQuery-4--停止动画和判断是否处于动画状态(防止动画加入队列过多的办法)的相关文章

jQuery停止动画和判断是否处于动画状态

1.停止元素的动画 stop([clearQueue][,gotoEnd]); 参数clearQHCHC和gotoEnd都足町选的参数,为Boolean值(ture或flase).clearQueue代表足胥婴清空术执{j.完的动嘶队列,90toEnd代表是否直接将萨在执行的动画跳转到术状态. 如粜商接使川stop()方法.![!IJ会.一即停.l卜专前一在进行的动画,如.粜接下来还有动画等待继续进行.呲0以当前状态J r始接下柬的动画.经常会遇到这种情况.在为.’个元索绑定hover事件之后.

Geodatabase - 判断是否处于编辑状态

Engine中提供IDatasetEdit来判断数据是否处于编辑状态,我们知道,在ArcMap中,进行编辑的不一定都是要素类,也可以是表,网络几何等.以下能在ArcMap中进行编辑的数据都实现了 IDatasetEdit接口: Classes that implement IDatasetEdit Classes Description AttributedRelationshipClass Esri Attributed Relationship Class object. Cadastral

锋利的jQuery读书笔记---jQuery中动画

jQuery中的动画: 1.show和hide 2.fadeIn和fadeOut 3.slideUp和slideDown <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <script type="text/javascript" src="../../js/jquery-2.1.3.js">

jQuery中的事件和动画——《锋利的jQuery》(第2版)读书笔记2

第4章 jQuery中的事件和动画 jQuery中的事件 加载DOM $(document).ready(function(){   // 编写代码... }); 可以简写成: $(function(){   // 编写代码... }); $(document).ready()方法的执行时机是在网页中所有DOM结构绘制完毕后就执行,可能此时DOM元素关联的东西(比如图片)并没有加载完. $(document).ready()方法能同时编写多个,每次调用$(document).ready()方法都

《锋利的jQuery》心得笔记--Two Sections

第三章 1.    DOM操作(节点) 1)         查找节点可以查找元素节点和属性节点 2)         创建节点: (1)       创建元素节点 var addLi = $(“<li></li>”);或者var addLi = $(“</li>”)不可以是var addLi = $(“<li>”); $(“ul”).append(addLi); (2)       创建文本节点:var addLi = $(“<li>文本节点&

锋利的jQuery第2版学习笔记4、5章

第4章,jQuery中的事件和动画 注意:使用的jQuery版本为1.7.1 jQuery中的事件 JavaScript中通常使用window.onload方法,jQuery中使用$(document).ready()方法. 1.执行时机 window.onload方法在网页所有元素都加载完毕之后才执行,$(document).ready()方法在DOM完全就绪就可以被调用 由于$(document).ready()方法内注册事件,只要DOM就绪就会被执行,因此有可能此时元素的关联文件还未下载完

jQuery如何停止元素的animate动画,还有怎样判断是否处于动画状态?【转】

停止元素的动画方法:stop() 语法结构:stop([clearQueue],[gotoEnd]) clearQueue 和 gotoEnd 都为可选参数,为布尔值. clearQueue : 是否要清空未执行玩的动画列表 gotoEnd : 是否直接将正在执行的动画跳转到末状态 经常在hover时间的动画效果里用到 stop() 方法,可以避免动画效果与光标动作不一致时导致的延迟动画. 例如: $(".test").hover(function(){     $(this).sto

锋利的jQuery第四章:jQuery中的事件和动画

第一部分 1, (1)$()是$(document)的简写,默认参数是document. $(function(){}是$(document).ready(function(){})的简写. 2, (1)事件绑定 bind(type [,data],fn); type是事件类型,有blur,focus,load,resize,scroll,unload,click,dbclick,mousedown,mouseup, mouseover,mousemove,mouseout,mouseenter

jQuery中停止动画stop

jQuery中停止动画stop 动画在执行过程中是允许被暂停的,当一个元素调用.stop()方法,当前正在运行的动画(如果有的话)立即停止 语法: .stop( [clearQueue ], [ jumpToEnd ] ) .stop( [queue ], [ clearQueue ] ,[ jumpToEnd ] ) stop还有几个可选的参数,简单来说可以这3种情况 .stop(); 停止当前动画,点击在暂停处继续开始 .stop(true); 如果同一元素调用多个动画方法,尚未被执行的动画