jQuery链接与动画函数的回调

时间:2016-01-27 12:21:20

标签: javascript jquery animation

说我有一些我想要动画的元素:

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

这和之间有什么区别:

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

就内部发生的事情而言?据我所知,动画在jQuery中是异步的。因此,第一个示例showslideUp应同时触发。在第二个中,slideUp只有在show结束后才会触发。

然而,出于某种原因,像on this answer这样的人说他们是“相同的”。尽管它们的工作方式不同(在第一个例子中,返回会立即发生,与第二个不同),为什么它们相同?

1 个答案:

答案 0 :(得分:5)

  

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

你是对的,他们不是。如果多个元素与.hey匹配,则它们之间存在特别大的差异。但是使用引用的代码,虽然它们采取的步骤顺序不同,但它们最终大致相同的事情。

  

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

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

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

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

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

Arun P Johny中的the comments突出显示了另一个非常重要的区别:如果您稍后将另一个动画函数添加到这些相同的元素,第一个示例将是 slideUp之后添加到队列,但在第二个示例中,{/ 1}} 之后其他动画。

但是,再加上你引用的代码,当他们走不同的道路去那里时,他们最终会做同样的事情。