更新时间:2021-07-19 来源:黑马程序员 浏览量:
使用动画的过程中,如果在同一个元素上调用一个以上的动画方法,那么对这个元素来说,除了当前正在调用的动画,其他的动画将被放到效果队列中,这样就形成了动画队列。
动画队列中所有动画都是按照顺序执行的,默认只有当前一个动画执行完毕,才会执行后面的动画。为此,jQuery提供了stop()方法用于停止动画效果,通过此方法,可以让动画队列后面的动画提前执行。
stop()方法适用于所有的jQuery效果,包括元素的淡入淡出,以及自定义动画等。stop()方法语法如下所示。
$(selector).stop(stopAll, goToEnd);
上述语法中,stop()方法的两个参数都是可选的。其中,stopAll参数用于规定是否清除动画队列,默认是false;goToEnd参数用于规定是否立即完成当前的动画,默认是false。
由于stop()方法的参数的不同设置,会有不同的作用,下面以div元素为例,演示4种常见的使用方式。示例代码如下。
$("div").stop(); // 停止当前动画,继续下一个动画 $("div").stop(true); // 清除div元素动画队列中的所有动画 $("div").stop(true, true); // 停止当前动画,清除动画队列中的所有动画 $("div").stop(false, true); // 停止当前动画,继续执行下一个动画
上述代码中,stop()方法在不传递参数时,表示立即停止当前正在执行的动画,开始执行动画队列中的下一个动画 。如果将第1个参数设置为true,那么就会删除动画队列中剩余的动画,并且永远也不会执行。如果将第2个参数设置为true,那么就会停止当前的动画,但参与动画的每一个CSS属性将被立即设置为它们的目标值。
前面在实现下拉菜单滑动效果时,如果用户频繁的操作,就会产生动画队列现象,影响用户体验,为了解决这个问题,下面通过stop()方法将代码进行改写。
$(".nav > li").hover(function () { $(this).children("ul").stop().slideToggle(200); });
上述代码中,在调用slideToggle之前调用stop()方法来阻止动画队列。