我看到了链中的.filter()
和.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
的工作方式。来自文件的权利:
当这种情况发生时,就好像新的一组元素被推到了维护在对象内部的堆栈。每次连续filter方法将一个新元素集推送到堆栈上。如果我们需要对于较旧的元素集,我们可以使用end()将集合从堆栈