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(){}
ご覧のとおり、キューから具体的に選択すると、それは正しいです。しかし、キュー全体を選択すると、すべてが台無しになります。誰かが何が起こっているのか、そしてその理由を教えてもらえますか?
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();
});
}
では、なぜこの奇妙な表示が行われるのか、私にはわかりません。私はまだこのコードをデバッグしようとしていますが、これがおそらく私を妨げているものだと思います。run 関数が完了するまで 2 番目のアニメーションを実行したくありません。動作するはずですが、実際には失敗します。
これが私のコードのjsFiddleです。- テスト中は、コンソールが開いていることを確認してください。コンソールが開いていない場合は、動作しているように見えるので、開いておいてください。「字幕」がフェードインではなくフリックして戻ることに注意してください。また、キューの順序の違いにも注意してください。