1

配列の配列があり、内側の配列の一部にはさらに別のネストされた配列があります。そうでない人もいます。最上位の配列要素をループし、内部配列がある場合はそれらをループします。ない場合は、ありません。とか、そう思います。

なんらかの理由で、反復処理でネストされた配列のない配列が見つかると、コンソールに「型エラー」が未定義と表示されます...ネストされた配列が定義されていないため、技術的には正しいです。ただし、ネストされた if ステートメントでは、これを評価できないと思いました。何かご意見は?

たとえば、animation[0][3] は配列ですが、animations[1][3] は未定義です。だから私のifループにはネストされた

var a = animations.shift();

if ( a[3] )
{
  console.log( 'a[3] is: ' + a[3] )
}
else
{
  return;
}

a[3] が存在する場合はコンソールにログを記録し、コンソールに出力せずにエスケープしない場合は、それを読みました...それでも、コンソールは未定義の評価を生成し続けます。それは単にその存在をテストすると未定義のエラーが返されるためですか? ネストされた配列を持たない配列に遭遇するたびに、このエラーがポップアップしないようにするにはどうすればよいですか?

ありがとう。

var animations = [
    ['.pcba','fadeIn', [1000], [
        ['.pcb_cad', 'fadeIn', [1000] ]
        ]
     ],
    ['.pcba', 'delay', [2000] ],
    ['.pcba','fadeOut', [1000], [
        ['.heatGenComps', 'fadeIn', [1000] ],
        ['.arrows', 'fadeIn', [1000] ]
        ]
    ],
    ['.heatGenComps', 'delay', [2000] ],
    ['.heatGenComps', 'fadeOut', [1000], [
        ['.arrows', 'fadeOut', [1000] ],
        ['.pcb_cad_cfd', 'fadeIn', [1000] ],
        ['.wePredOpTemps', 'fadeIn', [1000] ]
        ]
    ],

 ]; 

そして、私はそれらを次のように繰り返します:

iter();
function iter(){

if (!animating) return;

 var a = animations.shift();

if (a) {
     var el = a[0];
     var fn = a[1];
     var args = a[2];

     $.fn[ a[1] ].apply( $( a[0] ), a[2] ).promise().done(iter);
     if ( a[3] )
     {
        var secondary = a[3];
        console.log( 'a[3] is: ' + a[3] );
        secondaryAnime();
        function secondaryAnime(){
            b = secondary.shift();
            console.log('secondary is: ' + b );
            $.fn[ b[1] ].apply( $( b[0] ), b[2] );
            secondaryAnime();
         };

     }
     else
     {
        return;
     }


}
else
{

}

};
4

2 に答える 2

1

実際には、単純なアニメーション チェーンのコードがたくさんあります。やりたいことは、各ステップで同時にいくつかのアニメーションを表示することだけです。

プラグイン jquery-timing について聞いたことがありますか? ほとんどコードなしで非同期のものを連結できます。jquery-timing スタイルで記述された、同じタイミングでアニメーション チェーンを正確に実行するコード全体を示します。

$('.pcb_cad').fadeIn(1000)
    .$('.pcba').fadeIn(1000,$).wait(2000).fadeOut(1000)
    .$('.heatGenComps, .arrows').fadeIn(1000,$).wait(2000).fadeOut(1000)
    .$('.pcb_cad_cfd, .wePredOpTemps').fadeIn(1000);

ご覧のとおり、これは単なる 1 つの長い jQuery チェーンです。

ここでは、そのプラグインのタイミング メソッドのうち 2 つだけが必要です。最初に、フェード アニメーションの終了を待機するために、メソッド チェーンで次の jQuery コマンドを使用して待機するたびに、.fadeIn(…,$) を記述します。メソッド .wait(timeout) は、指定されたタイムアウトの後、メソッド チェーン内の後続のすべてのメソッドを続行します。

また、プラグインには、アクションを延期および連結するためのより直感的な方法が多数あります。

于 2012-11-19T03:31:55.833 に答える
0

例外の原因は、ネストされた配列を反復する方法です b. secondary.shift(); のフェッチを停止すると、終了条件がなくなります。

secondary.shift() を割り当てた後に "if (b) { … }" というテストを実行すると問題ありません。

ところで: 空の「else」ブロックをすべて記述する必要はありません。

于 2012-11-19T03:11:41.620 に答える