如何在没有手动回调链接的情况下按顺序放置效果?

时间:2014-07-03 19:22:47

标签: jquery callback sequence effects

我想运行几个效果,以便我执行它们,也意味着下一个开始时,不是更早。

foo.fadeOut...
bar.fadeIn... 

我试图使用队列,但我做得更乱(实际代码,第一个效果):

source.animate({
  top:pos.top+2*target.height(),
  left:pos.left+target.width()/2-source.width()/2,
},{
  duration: 1000,
  queue : 'fx'
})
.delay(500,'fx');

下一个效果:

selected.unbind('click') // not an effect, I know
    .css('cursor', 'auto') // not an effect
    .fadeOut({ // the effect
      duration: 500...
      queue: 'fx' ...

在处理上述动画时开始(即淡出)。

我不想使用手动回调链接,因为有太多的条件逻辑,所以如果我不得不使用回调,首先我会编写一个堆栈效果管理器,它会将效果排入队列。我希望这样的经理已经用jQuery编写了。

我想避免的典型例子:

foo({ complete: bar});

因为在您运行的每个位置bar,您必须先考虑它之前的内容并提前调用它。

解决

我以这种方式重写了第二个电话:

selected.unbind('click')
    .css('cursor', 'auto')
    .queue('fx',function ()
{
    selected.fadeOut({ duration: 500,
    queue: 'fx',
});}).dequeue();

唯一的问题是我不明白为什么后者有效而前者没有 - 他们应该100%等同吗?

问题 - 这里发生了什么?

我已经注意到的一个区别是,尽管使用'fx'显式queue需要明确dequeue - 因此fx的自动启动功能不起作用。

更新2:感谢Felix Kling我把所有内容放在promises上,最后一切都按预期工作。我仍然不知道为什么队列中存在这样的问题。

0 个答案:

没有答案