當我第一次使用console.log(elem.queue());
它返回一個空數組[]
,但如果我使它更具體又名console.log(elem.queue()[0]);
它給了我正確的順序個別功能。第一次後,當我使用console.log(elem.queue());
時,它返回正確的長度,但它返回的函數順序與它們應該的順序不同,有時它返回undefined。但仍然當我使用console.log(elem.queue()[0]);
它返回所期望的。這裏是我的代碼和輸出結果:爲什麼在將阻塞函數放入隊列時jQuery的動畫中斷?
//The correct queue order is: animate, run, animate
console.log(elem.queue('jChain')); //1: []
//2+: [run(){}, animate(){}, undefined x 1]
console.log(elem.queue('jChain')[0]); //animate(){}
console.log(elem.queue('jChain')[1]); //run(){}
console.log(elem.queue('jChain')[2]); //animate(){}
正如你所看到的,當我特別從隊列中選擇時,它是正確的。但是,當我選擇整個隊列時,一切都會紊亂起來。 有人可以告訴我發生了什麼,爲什麼?創建隊列
UPDATE
代碼:
console.log(queue); /* [{args:Array[2], method:"animate"},
* {args:Array[2], method:"run"},
* {args:Array[2], method:"animate"}] */
elem.clearQueue('jChain');
$.each(queue, function(key, value){
if(value.method == 'animate'){
value.args[1] = {duration:value.args[1], queue:'jChain' /*,complete:function(){elem.dequeue('jChain');}*/ };
elem[value.method].apply(elem, value.args);
}else{
run.apply(elem, value.args);
}
});
function run(fn, args){
args = args || [];
self = this;
self.queue('jChain', function(next){
if(fn)
fn.apply(self, args);
next();
});
}
那麼它爲什麼這個奇怪的顯示,我不知道。我試圖調試這個代碼,我想這可能是阻止我回來。我不希望第二個動畫執行,直到我的運行功能完成,它似乎應該工作,但它真的失敗。
Here is a jsFiddle of my code. - 確保在測試時打開控制檯。如果控制檯沒有打開,它會看起來像它的工作,所以它打開。注意「副標題」是如何彈回而不是淡入的,並且還注意到排隊順序的差異。
您可以發佈正在創建此隊列中的代碼? –
如果你的'for'循環設置爲10小提琴動畫工作正常... – Owlvark
@Owlvark - 這表明我跑我的第二次生命的呼叫被同時執行。我不知道爲什麼這是哈哈。 – Aust