0

この投稿を読んでいただきありがとうございます。最後に、ここで質問するのに十分な勇気を築き上げました:)正しい方法で質問をしたいと思います。

私の問題は、ページの周りに「正方形」をランダムにアニメーション化しようとしていますが、setInterval メソッドに問題があることです。

ここで見つけることができますhttp://jsfiddle.net/xEMXh/

Init 関数では、各ゴースト要素を調べて、X 秒ごとにランダムな方向にアニメーション化する間隔関数を設定しようとしています。

for (ghostCount = 0; ghostCount < ghosts.length; ghostCount += 1) {
            var speed = LesMccutcheon.GhostHunter.GetSpeed($(ghosts[ghostCount]).attr('data-speed')),
                activeGhost = ghosts[ghostCount];
            window.setInterval(function() {
                LesMccutcheon.GhostHunter.MoveInDirection(activeGhost);
            }, speed);
        }

起こっているのは、最後の「ゴースト」要素だけがアニメーション化されていることです。これは、for ループで変数をオーバーライドしていて、最初の間隔が呼び出されるまでに、activeGhost が for ループの最後のセットであるためです。

set.Interval で直接ghosts[ghostCount]を使用しようとしましたが、set interval はこれにアクセスできないようです。set.Interval anom 関数内の変数に設定しようとしましたが、未定義として記録されました。

私の唯一の他の中途半端なアイデアは、インクリメンタル変数識別子を設定しようとすることですが、それは非常に非生産的であり、良い方法ではないようです。

アドバイスをよろしくお願いします!

4

1 に答える 1

2

コードでは、変数activeGhostはループごとに上書きされます。の呼び出しをsetIntervalこのようなクロージャに入れるだけです

( function (activeGhost) {
    window.setInterval(function() {
        LesMccutcheon.GhostHunter.MoveInDirection(activeGhost);
    }, speed);
} ( activeGhost) );

このようにして、正しい要素への参照を保持する必要があります。

于 2012-10-27T13:30:09.637 に答える