在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();
});
答案 0 :(得分:5)
根据我的理解,当您执行fadeIn / fadeOut等操作时,您正在创建的请求将放置在内部动画队列中,该队列以FIFO方式执行操作。其他人可以更详细地说明这一点,但因为它的工作原理并不需要使用回调。
答案 1 :(得分:1)
回调对异步操作有意义。因此,如果您希望在淡入淡出完成后发生某些事情,则回调即可。在您的情况下,后续链接.addClass()
不等待淡入淡出完成。它立即发生。
答案 2 :(得分:1)
因为简单地说,对.fadeIn
的调用并不等待。它只是将效果添加到队列中,然后继续使用您拥有的任何其他代码。 jQuery文档所说的是,如果你想在效果完成后向一个元素添加一个类(他们只是用它作为例子),你必须使用回调,这是在效果结束时调用。
此外,你绝对可以通过使用回调链接两个效果,但它是不必要的键入量(开发人员通常的目标是尽可能地懒惰)。它在没有回调的情况下将两个效果链接在一起的原因是,调用.fadeIn
或.fadeOut
会为该DOM元素的jQuery效果队列添加适当的效果。一次一个地从队列中按顺序播放效果,因此无论您将它们添加到队列的速度有多快,它们都会以正确的速度和时间播放。