2

一些 jQuery 动画方法采用描述为 的参数complete,这是一个在动画完成后将被调用的函数。例如:

$(obj).slideUp(duration, easing, complete());

complete这与在动画之后调用有什么不同?

$(obj).slideUp(duration, easing)
.complete();
4

2 回答 2

3

不同之处在于,在第二种情况下,在动画开始complete后立即调用它,而将其作为回调传递会在动画结束时触发它。

动画实际上可以是异步的,因此在您启动动画后 javascript 会继续执行,因此立即调用complete()after$(obj).slideUp(duration, easing);不能保证complete在动画完成后才会执行调用,只有在动画开始后才会执行。

$(obj).slideUp(duration, easing, complete());

真的应该

$(obj).slideUp(duration, easing, complete);

事实上,在第一种情况下,您甚至动画开始之前就调用了该complete函数!

最后,请注意第二个示例似乎是错误的:

$(obj).slideUp(duration, easing)
.complete();

这是将调用链接到slideUp调用complete但 jquery 对象没有complete方法。应该是:

$(obj).slideUp(duration, easing);
complete();

因为它实际上是在问题的先前编辑中。

于 2013-10-28T12:52:42.930 回答
3
$(obj).slideUp(duration, easing, complete());

这是错误的。这是complete 之前 slideUp的调用,甚至被调用。

$(obj).slideUp(duration, easing);
complete();

这将执行slideUp并立即调用completeslideUp动画可能还没有(事实上,肯定不会)在被调用的时候完成complete

$(obj).slideUp(duration, easing, function () {
    alert('Complete!');
});

// or

$(obj).slideUp(duration, easing, complete);
                                     // ^^ look ma, no () !

现在就是你应该如何使用它。“完全的!” slideUp仅在动画完成后才会发出警报。

于 2013-10-28T12:53:23.217 回答