我想运行几个效果,以便我执行它们,也意味着下一个开始时,不是更早。
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
上,最后一切都按预期工作。我仍然不知道为什么队列中存在这样的问题。