使用新的jQuery 1.6 $ .animate“promise”和回调之间的区别?

时间:2011-05-03 19:32:30

标签: jquery jquery-deferred

见这里:http://blog.jquery.com/2011/05/03/jquery-16-released/

这种新格式有什么区别:

$(".elements").fadeOut();

$.when( $(".elements") ).done(function( elements ) {
  // all elements faded out
});

和旧的:

$(".elements").fadeOut(function() { /* all elements faded out */});

3 个答案:

答案 0 :(得分:5)

正如Chad所说,$ .when允许你传递一堆回调,一旦所有这些回调完成,就会完成。

http://vimeo.com/22687950是关于延期的视频,并且引入了大约15分钟的标记$ .when()。大约20分钟你会看到这段代码:

   var $balls = $(".bounceDemo"),
      a = $balls.eq(0).drop(500),
      b = $balls.eq(1).drop(2000),
      c = $balls.eq(2).drop(4000);
   $.when(a,b,c)
      .done(function(){
          //do something
      });

答案 1 :(得分:0)

我所知道的唯一区别是$ .when()。done()语法允许多个回调函数。而许多传递回调函数的“旧”方法需要1个函数对象。

在你的例子中,我可以有5个不同的函数调用.done()而不是动画完成时的一个回调。你甚至可以用$ .when()。done()语法(deferred.done())传入一个函数对象数组。

答案 2 :(得分:0)

新格式使用deferred objects。它们最初被引入作为传统AJAX回调的更灵活的替代方案,因为它们为回调链接和解析提供了更高级别的控制。

已经证明延迟对象足够有用,许多人想用它们将动画链接到他们的AJAX应用程序逻辑中。到目前为止,animate()来自{{1}}来电promise的回复是possible but awkward。 jQuery 1.6现在支持开箱即用。