0

我已经看到链中的.filter()and.end()调用,这让我相信这是可能的。所以我制作了自己的函数,可以添加到链中rawr()

$('#object').fadeIn().rawr().delay(1000).fadeOut();

我希望 rawr() 看看接下来会发生什么,并根据它是什么,允许执行继续或结束链并移动到下一行代码。这是怎么做到的?

4

3 回答 3

1

如果不解析 JavaScript 源代码本身,就无法直接获取调用函数链中的下一个 jQuery 函数。

鉴于您的评论:

我在考虑不要只处理动画。

您将希望使用该queue方法将函数存储在fx队列中。当自定义函数被执行时,fx队列会将 jQuery 链中的所有动画排入队列。

在您的自定义函数中,您将能够访问fx队列并检查排队的内容。在队列出队之前,您还可以调用clearQueue以删除任何排队的函数fx

有必要将自定义排队函数出队,因为fx在当前执行的函数指示它已完成之前,队列不会继续为任何其他排队函数继续。

话虽如此,听起来你应该打破你的链条并有条件地执行方法,而不是尝试链接稍后简单清除的动画。

于 2012-08-22T19:04:46.363 回答
0

有条件地结束一个链是可能的,看这里

$.fn.if = function(flag) {
    return (flag) ? this.pushStack( this ) : this.pushStack( [] );
};

但是,无法提前查看链中的当前项目。

于 2012-08-22T18:56:20.427 回答
0

这不是如何.filter工作.end的。就在文档中

当这种情况发生时,就好像新的元素集被推到了一个在对象内部维护的堆栈上。每个连续的过滤方法都会将一个新元素集推入堆栈。如果我们需要一个较旧的元素集,我们可以使用 end() 将集合从堆栈中弹出。

于 2012-08-22T18:56:44.010 回答