为什么链接jquery效果,而不是使用回调

时间:2017-06-06 23:14:21

标签: javascript jquery animation effects

在jquery文档中声明如果要在对选择应用效果后添加类,则必须使用回调:

// Fade in all hidden paragraphs; then add a style class to them (not quite right)
$( "p.hidden" ).fadeIn( 750 ).addClass( "lookAtMe" );

// Fade in all hidden paragraphs; then add a style class to them (correct with animation callback)
$( "p.hidden" ).fadeIn( 750, function() {
// this = DOM element which has just finished being animated
$( this ).addClass( "lookAtMe" );
});

但是,您可以链接两个效果,而无需使用回调:

$(".something").fadeOut().fadeIn();

为什么?你也不应该像这样使用回调:

$( ".something" ).fadeOut( 750, function() {
   $( this ).fadeIn();
});

3 个答案:

答案 0 :(得分:5)

根据我的理解,当您执行fadeIn / fadeOut等操作时,您正在创建的请求将放置在内部动画队列中,该队列以FIFO方式执行操作。其他人可以更详细地说明这一点,但因为它的工作原理并不需要使用回调。

答案 1 :(得分:1)

回调对异步操作有意义。因此,如果您希望在淡入淡出完成后发生某些事情,则回调即可。在您的情况下,后续链接.addClass()不等待淡入淡出完成。它立即发生。

答案 2 :(得分:1)

因为简单地说,对.fadeIn的调用并不等待。它只是将效果添加到队列中,然后继续使用您拥有的任何其他代码。 jQuery文档所说的是,如果你想在效果完成后向一个元素添加一个类(他们只是用它作为例子),你必须使用回调,这是在效果结束时调用。

此外,你绝对可以通过使用回调链接两个效果,但它是不必要的键入量(开发人员通常的目标是尽可能地懒惰)。它在没有回调的情况下将两个效果链接在一起的原因是,调用.fadeIn.fadeOut会为该DOM元素的jQuery效果队列添加适当的效果。一次一个地从队列中按顺序播放效果,因此无论您将它们添加到队列的速度有多快,它们都会以正确的速度和时间播放。