♠♠ 简短回答:
你编写的所有代码(异步或非异步)都会先运行,当它们完成后,complete 中的代码才会运行。
你也可以在 done 函数中使用两个参数,而 complete 函数不接受任何参数。
♠♠ 详细回答:
done 和 complete 有两个区别:
1- done 具有时间优先级,因此你编写的所有代码(异步或非异步)都会先运行,当它们完成后,complete 中的代码才会运行。
例如,在以下代码(jsFiddle)中,我们有一个带有 done 和 complete 函数的动画,当动画完成时,done 函数将 div 的背景颜色设置为 blue,而 complete 函数将 div 的背景颜色设置为 red:
$.noConflict();
jQuery(document).ready(function ($) {
$('#d_1').click(function () {
$(this).animate
(
{
width: '200px'
},
{
duration: 800,
complete: function () {
$(this).css({
backgroundColor: 'red'
});
},
done: function () {
$(this).css({
backgroundColor: 'blue'
});
}
}
)
});
})
正如您所见,最终的背景颜色是红色的,这是在 complete 函数中设置的。
2- done 和 complete 都是函数,但 complete 无法接受任何参数,而 done 可以有两个参数(来自于jQuery文档):
done
类型:Function(Promise animation,Boolean jumpedToEnd)
当元素上的动画完成时(其 Promise 对象解析),将调用该函数。(版本添加:1.8)
"promise animation" 是 jQuery 动画的 "fx" 原型,而 "jumpedToEnd" 是辅助参数,它意味着如果动画被中断或不成功(其 Promise 对象被拒绝),它会自动跳到结尾。
done()
是一个常见的jQuery方法,可与promises一起使用。由于animate()
现在返回一个promise,因此它可以像任何其他promise一样与done()
一起使用。您甚至可以使用done()
来处理多个动画,以查看它们何时都完成,而另一个是内置于animate()
方法中的普通回调。 - adeneoalways
选项之前,我是这么认为的。这是否与complete
同义?文档的这个部分需要进行严肃的改进。不幸的是,我现在没有时间或精力来运行测试。 - Beetroot-Beetroot