你在正确的轨道上queue
,只需检查队列的长度,例如:
var a = $("#a");
if (a.queue().length === 0) {
a.animate(...);
}
实例| 直播源
如果您愿意,可以为此创建一个小型插件:
(function($) {
$.fn.maybeAnimate = maybeAnimate;
function maybeAnimate() {
var args = arguments;
this.each(function() {
var $this = $(this);
if ($this.queue().length === 0) {
$this.animate.apply($this, args);
}
});
return this;
}
})(jQuery);
...然后像这样使用它:
$("#a").maybeAnimate({width: 'toggle'}, 1500);
$("#b").maybeAnimate({width: 'toggle'}, 1500);
$("#b").maybeAnimate({width: 'toggle'}, 1500); // Really #b again???
实例| 直播源
在下面回复您的评论:
但是当点击的功能比较复杂并且不仅包括“动画”,还包括不同的功能以及 if/else 时该怎么办?我希望点击的所有功能都是一个队列。是否可以?
要将动画的结果与其他异步事物结合起来,您可能需要使用Deferred
和Promise
对象。您可以使用;Promise
从 jQuery 集中获取动画 .promise
例如:
var p = $("#a").animate(/*...*/).promise();
然后,您可以通过$.when
和将该承诺与其他承诺/延迟结合起来Promise#then
。