jquery animate方法中的done和complete选项有什么区别

时间:2013-06-15 16:43:05

标签: jquery

今天当我在选项中阅读jQuery .animate()方法的新功能时,我遇到了两个我认为具有相同操作的选项。

这些选项为donecomplete。根据文档,它们是动画完成时运行的函数。

complete
Type: Function()
A function to call once the animation is complete.

和:

done
Type: Function( Promise animation, Boolean jumpedToEnd )
A function to be called when the animation completes (its Promise object is resolved). (version added: 1.8)

现在我的问题是两者有什么区别?

3 个答案:

答案 0 :(得分:3)

JQuery使用promise,这意味着在完成JavaScript时可以从promise获取下一个函数。

假设您已经写过去foo并转到酒吧功能。 JQuery将在首次开始执行后开始第二个,而不管第一个完成。

因此,当您实施承诺时,它将等待之前完成。

最后在你的情况下,完成将在完成后调用:)。因此,如果你想在动画完成后进行处理,并在第一次技巧完成时再做一些技巧,请将其完整写入。

答案 1 :(得分:2)

done()在整个jQuery中是全局的,并且基于正在完成的promise中的所有事件触发,无论它们是否排队或异步。

在jquery的网站上查看承诺:jQuery Promise

文档示例:

var effect = function() {
  return $("div").fadeIn(800).delay(1200).fadeOut();
};

$("button").on("click", function() {
  $("p").append(" Started... ");

  $.when(effect()).done(function() {
    $("p").append(" Finished! ");
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>Go</button>
<p>Ready...</p>
<div></div>
<div></div>
<div></div>
<div></div>

答案 2 :(得分:0)

♠♠简要答案

您编写的所有已完成代码(无论是否异步)都会先运行,当它们完成后,将运行完成的代码

您还可以在done函数中使用两个参数,而complete函数不接受任何argumetn

♠♠详细答案

完成和完成之间有两个区别:

1-完成具有完成时间的优先级,因此您首先编写的所有代码(无论是否异步)都将运行,当它们完成时,将运行完成的代码

例如,在以下代码(jsFiddle)中,我们有一个具有完成功能和完成功能的动画,当动画完成时, done 函数将div的背景色设为 blue complete 功能使div的背景颜色为红色

{{1}}

您会看到最终的背景颜色是红色,它是在完整功能中设置的。

2-完成和完成是函数,但是完成不能接受任何参数,而完成可以有两个参数(来自jQuery documentation):

  

完成

     

类型:函数(Promise动画,布尔型jumpedToEnd)

     

当元素上的动画完成(解析其Promise对象)时要调用的函数。 (添加的版本:1.8)

“承诺动画”与jQuery动画的“ fx”原型相同,而“ jumpedToEnd”是辅助参数,这意味着如果动画被中断或失败(其Promise对象被拒绝),它将自动跳到最后