说我有一些我想要动画的元素:
$('.hey').show(1000).slideUp(1000);
这和之间有什么区别:
$('.hey').show(1000, function() {
$(this).slideUp(1000);
});
就内部发生的事情而言?据我所知,动画在jQuery中是异步的。因此,第一个示例show
和slideUp
应同时触发。在第二个中,slideUp
只有在show
结束后才会触发。
然而,出于某种原因,像on this answer这样的人说他们是“相同的”。尽管它们的工作方式不同(在第一个例子中,返回会立即发生,与第二个不同),为什么它们相同?
答案 0 :(得分:5)
然而,出于某种原因,人们喜欢这个答案说他们是同一个"同样的"。
你是对的,他们不是。如果多个元素与.hey
匹配,则它们之间存在特别大的差异。但是使用引用的代码,虽然它们采取的步骤顺序不同,但它们最终做大致相同的事情。
为什么它们相同但尽管它们的工作方式不同(在第一个例子中,返回会立即发生,与第二个不同)?
在这两个示例中,代码都会立即运行并完成("返回")。
在第一个示例中,对slideUp
的调用立即发生但是 jQuery通过将slideUp动画添加到动画队列的末尾并返回来处理该调用;实际的slideUp在动画队列中到达后会发生。
在第二个示例中,对show
的调用立即发生,然后在动画完成后,对slideUp
的调用完成。
多个元素与您的选择器匹配时的主要区别在于,在第一个示例中,对slideUp
进行了一次调用,这会将slideUp操作添加到当前集的动画队列中您调用它的jQuery对象中的元素。在 second 中,有一些多次调用完成回调,每个元素完成一次。
Arun P Johny中的the comments突出显示了另一个非常重要的区别:如果您稍后将另一个动画函数添加到这些相同的元素,第一个示例将是 slideUp
之后添加到队列,但在第二个示例中,{/ 1}} 之后其他动画。
但是,再加上你引用的代码,当他们走不同的道路去那里时,他们最终会做同样的事情。