j查询链接与动画函数的回调

jQuery chaining vs. callbacks for animation functions

本文关键字:函数 回调 动画 查询 链接      更新时间:2023-09-26

假设我有一些元素想要制作动画:

$('.hey').show(1000).slideUp(1000);

这和:

$('.hey').show(1000, function() {
  $(this).slideUp(1000);
});

就内部发生了什么?据我所知,动画在jQuery中是异步的。所以第一个例子,showslideUp应该同时触发。在第二个中,slideUp应该只在show结束后开火。

然而,出于某种原因,喜欢这个答案的人说他们是"相同的"。尽管(明显的)它们的工作方式不同,但它们为什么是相同的(在第一个例子中,与第二个例子不同,退货会立即发生)?

然而,出于某种原因,喜欢这个答案的人说他们是"相同的"。

你是对的,他们不是。如果多个元素与.hey匹配,它们之间的差异特别大。但是对于您引用的代码,尽管他们采取的步骤顺序不同,但它们最终会做同样的事情。

尽管(明显的)它们的工作方式不同,但它们为什么是相同的(在第一个例子中,与第二个例子不同,退货会立即发生)?

在这两个示例中,代码立即运行并完成("返回")。

在第一个示例中,对slideUp的调用会立即发生,但 jQuery 通过将 slideUp 动画添加到动画队列的末尾并返回来处理该调用;实际的 slideUp 发生在动画队列中到达时

在第二个示例中,对show的调用立即发生,然后在动画完成后,对slideUp的调用完成。

当多个元素与您的选择器匹配时,主要区别在于,在第一个示例中,有一个slideUp 的调用,这会将 slideUp 操作添加到您调用它的 jQuery 对象中当前元素集的动画队列中。在第二个中,对完成回调有多个调用,每个元素在完成时调用一个。

Arun P Johny 在评论中强调了另一个非常重要的区别:如果您稍后要向这些相同的元素添加另一个动画函数,在第一个例子中,它将添加到slideUp之后的队列中,但在第二个示例中,slideUp将在另一个动画之后

但是对于你引用的代码,同样,当他们走不同的道路到达那里时,他们最终会做同样的事情。