当我console.log(elem.queue());
第一次使用它时,它会返回一个空数组[]
,但如果我让它更具体,也就是console.log(elem.queue()[0]);
它会以正确的顺序为我提供各个函数。第一次之后,当我使用console.log(elem.queue());
它时,它返回正确的长度,但它返回的函数顺序与它们应该的顺序不同,有时它返回未定义。但是当我使用console.log(elem.queue()[0]);
它时仍然会返回预期的结果。这是我的代码以及输出的内容:
//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(){}
如您所见,当我专门从队列中选择时,它是正确的。但是当我选择整个队列时,一切都搞砸了。有人可以告诉我发生了什么,为什么?
更新
创建队列的代码:
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();
});
}
那么为什么它会出现这种奇怪的显示,我不知道。我仍在尝试调试此代码,我认为这可能是阻碍我的原因。在我的运行功能完成之前,我不希望执行第二个动画,它看起来应该可以工作,但实际上它失败了。
这是我的代码的 jsFiddle。- 确保在测试时打开控制台。如果控制台未打开,它看起来可以正常工作,因此请打开它。请注意“字幕”如何重新打开而不是淡入,并注意队列顺序的差异。