1

画面の周りをランダムに飛んで側面から跳ね返る 5 つのバグのアニメーションを作成しています。バグごとにアニメーションを行う機能を作りました。これは機能の一部です。getElementById() に渡すと、bugName 変数には文字列「bugOne」が含まれます。このコードを使用すると、この行に対してオブジェクトの予期されるエラーが発生します。

 if (xDirection == "right" && xPosition > (widthMax - document.getElementById(bugName).width - flySpeed))
 xDirection = "left";

代わりにこのコードを使用すると、構文エラーは発生しません (ただし、アニメーションは何らかの理由で正しく動作しません)。

 if (xDirection == "right" && xPosition > (widthMax - document.getElementById("bugOne").width - flySpeed))
     xDirection = "left";

構文エラーを発生させずに渡すbugNameにはどうすればよいですか?getElementById()

これが "bugOne" が bugName に入った方法です。一部のコードを削除し、基本のみを表示しています。

body onload イベントハンドラから呼び出しました。

<body onload="flyVar=setInterval('setBug(\'bugOne\')', 30);">

これで、ドキュメント ヘッドでこの関数が呼び出されました。

    function setBug(bugName) {
        flyBug(bugName);

}

そして、それはドキュメントヘッドにもあるこの関数を呼び出しました。

function flyBug(bugName) {

    if (bugName == "bugOne") {
        flySpeed = 5;
        xPosition = 0;
        yPosition = 100;
        xDirection = "right";
        yDirection = "up";

     if (xDirection == "right" && xPosition > (widthMax - document.getElementById(bugName).width - flySpeed))
         xDirection = "left";
}
4

1 に答える 1

0

ここでの問題は、setInterval()パラメーターを含めることを直接サポートしていないことです (現在これをテストすることはできませんが、Mozillaが次の場所を見つけたと思います:

コールバック引数

コールバック関数に引数を渡す必要があるが、(setTimeout() または setInterval() で) 追加パラメーターの送信をサポートしていない Internet Explorer で動作させる必要がある場合は、この IE 固有の互換性コードを含めることができます。スクリプトの先頭に挿入するだけで、両方のタイマーに対してそのブラウザーで HTML5 標準パラメーター通過機能が有効になります。

[...コード例...]

別の可能性として、無名関数を使用してコールバックを呼び出すこともできますが、このソリューションは少し高価です。例:

 var intervalID = setInterval(function() { myFunc("one", "two", "three"); }, 1000);

さらに別の可能性は、関数のバインドを使用することです。例:

 var intervalID = setInterval(function(arg1) {}.bind(undefined, 10), 1000);

したがって、次のように onload 呼び出しを変更することで、この動作を修正できると思います。

<body onload="flyVar=setInterval(function() { setBug('bugOne'); }, 30);">
于 2013-04-09T20:12:51.573 に答える