我已经看到链中的.filter()
and.end()
调用,这让我相信这是可能的。所以我制作了自己的函数,可以添加到链中rawr()
$('#object').fadeIn().rawr().delay(1000).fadeOut();
我希望 rawr() 看看接下来会发生什么,并根据它是什么,允许执行继续或结束链并移动到下一行代码。这是怎么做到的?
我已经看到链中的.filter()
and.end()
调用,这让我相信这是可能的。所以我制作了自己的函数,可以添加到链中rawr()
$('#object').fadeIn().rawr().delay(1000).fadeOut();
我希望 rawr() 看看接下来会发生什么,并根据它是什么,允许执行继续或结束链并移动到下一行代码。这是怎么做到的?
如果不解析 JavaScript 源代码本身,就无法直接获取调用函数链中的下一个 jQuery 函数。
鉴于您的评论:
我在考虑不要只处理动画。
您将希望使用该queue
方法将函数存储在fx
队列中。当自定义函数被执行时,fx
队列会将 jQuery 链中的所有动画排入队列。
在您的自定义函数中,您将能够访问fx
队列并检查排队的内容。在队列出队之前,您还可以调用clearQueue
以删除任何排队的函数fx
。
有必要将自定义排队函数出队,因为fx
在当前执行的函数指示它已完成之前,队列不会继续为任何其他排队函数继续。
话虽如此,听起来你应该打破你的链条并有条件地执行方法,而不是尝试链接稍后简单清除的动画。
有条件地结束一个链是可能的,看这里。
$.fn.if = function(flag) {
return (flag) ? this.pushStack( this ) : this.pushStack( [] );
};
但是,无法提前查看链中的当前项目。
这不是如何.filter
工作.end
的。就在文档中:
当这种情况发生时,就好像新的元素集被推到了一个在对象内部维护的堆栈上。每个连续的过滤方法都会将一个新元素集推入堆栈。如果我们需要一个较旧的元素集,我们可以使用 end() 将集合从堆栈中弹出。