Javascript jQuery。queue()与使用回调函数来完成某件事情有何不同?

Javascript jQuery。queue()与使用回调函数来完成某件事情有何不同?,javascript,jquery,queue,jquery-callback,Javascript,Jquery,Queue,Jquery Callback,html: 因此,每次单击SPAN时,字体大小增加后会追加文本“滚动”,而不是同时出现 也可以使用queue()完成,如下所示: js:(使用queue()) 我不知道他们之间有什么区别。两者都做同样的事情 为什么queue()比使用回调更好/更喜欢(或者为什么不是)?queue()有什么特别之处? 谢谢 在放入动画时,可以将更多事件(在代码中指定其他事件)放入同一队列中 因此,回调将在动画准备就绪后立即执行,但在使用queue()的情况下,队列中可能有其他事件将首先执行 这种行为的优点是不会同

html:

因此,每次单击
SPAN
时,字体大小增加后会追加文本“滚动”,而不是同时出现

也可以使用queue()完成,如下所示:

js:(使用queue())

我不知道他们之间有什么区别。两者都做同样的事情

为什么queue()比使用回调更好/更喜欢(或者为什么不是)?queue()有什么特别之处?

谢谢

在放入动画时,可以将更多事件(在代码中指定其他事件)放入同一队列中

因此,回调将在动画准备就绪后立即执行,但在使用queue()的情况下,队列中可能有其他事件将首先执行

这种行为的优点是不会同时执行并发事件(例如,向上滑动和向下滑动),这会产生奇怪的结果

例如:

$('span').click(function() {
  $(this).animate({
    fontSize: '+=10px'
  }, 'slow'})
  .queue(function() {
    $(this).text(  $(this).text() + ' rolled! ' );
  });
});
如果您首先单击div,然后紧接着单击span,现在可以确保首先执行div的队列,并且当它准备好时,将执行span的队列


在回调的情况下,将首先执行属于首先准备好的动画的回调。如果它们同时准备好了,那么它们将同时被执行。这将导致,在这种情况下,既看不到“已着色!”文本或“变大了!”text.

使用
回调
参数与使用
队列(回调)
方法完全相同。
当您向任何动画提供
回调
时,它只是以与
.queue
相同的方式对回调进行排队

.queue(callback)
只是在动画中单独添加回调的另一种方法。
有充分的理由这样做:

$('div').click(function() {
  $(this).animate({
    color: 'green'
  }, 'slow'})
  .queue(function() {
    $(this).text( ' got colored! ' );
  });
});

$('span').click(function() {
  $(this).animate({
    fontSize: '+=10px'
  }, 'slow'})
  .queue(function() {
    $(this).text(  ' got bigger! ' );
  });
});

检查这个帖子-谢谢你的回答,但很难理解,你有例子吗?@tangelo我一点也不懂这个答案。该示例与您的描述不匹配。你能解释一下“div”动画与“span”动画的关系吗?@Scott Rippey:没错,这个例子与描述不完全相符。在本例中,我还想演示不同对象上的动画将在同一队列中结束(除非您指定不同的队列名称)。@tangelo如果我理解正确,当您单击“div”,然后立即单击“span”时,它们将同时动画。“span”不会等到“div”动画完成,因为它们在两个完全不同的队列中。@Scott Rippey:不,它们将在同一队列中结束。因此,span上的一个将等待div上的一个完成。
$('span').click(function() {
  $(this).animate({
    fontSize: '+=10px'
  }, 'slow'})
  .queue(function() {
    $(this).text(  $(this).text() + ' rolled! ' );
  });
});
$('div').click(function() {
  $(this).animate({
    color: 'green'
  }, 'slow'})
  .queue(function() {
    $(this).text( ' got colored! ' );
  });
});

$('span').click(function() {
  $(this).animate({
    fontSize: '+=10px'
  }, 'slow'})
  .queue(function() {
    $(this).text(  ' got bigger! ' );
  });
});
$(this).animate(...);
if (shouldDoCallback) {
    $(this).queue(...);
}