0

JavaScript で独自のスライド ショーをコーディングしようとしています。私がすでに持っているのは、Opera、Safari、および Chrome で動作するスケルトンです。

var slideShow = (function() {
    var latestGames = document.getElementById('latestGames').getElementsByTagName('li');
    var displayedGame = 0;
    return {
        init: function() {
            latestGames[displayedGame].style.display = 'inline';
            setInterval(this.update, 3000);
        },
        update: function(gameToDisplay) {
            console.log("Displayed game: " + displayedGame);
            latestGames[displayedGame].style.display = 'none';
            gameToDisplay = gameToDisplay || (displayedGame === (latestGames.length - 1) ? 0 : ++displayedGame);
            console.log("Game to display: " + gameToDisplay);
            console.log('====================');
            latestGames[gameToDisplay].style.display = 'inline';
            displayedGame = (gameToDisplay == latestGames.length ? 0 : gameToDisplay);
        }
    }
})();

しかし、Firefox では、gameToDisplay 変数をログに記録すると乱数しか取得できません。エラーがどこにあるかわかりません。

事前に感謝します。

4

3 に答える 3

4

Firefox(pre-13)は、パラメータをインターバルハンドラに渡します。このパラメーターは、関数呼び出しの「遅延」を示します。つまり、呼び出されるべき時を超えたミリ秒数。

ここで黄色の警告を参照してください:

注:Gecko 13(Firefox 13.0 / Thunderbird 13.0)より前は、Geckoは追加のパラメーターをコールバックルーチンに渡し、タイムアウトの「実際の遅延」をミリ秒単位で示していました。この非標準パラメーターは提供されなくなりました。

于 2012-05-28T22:26:05.523 に答える
4

次のコードを使用します。

var self = this; // preserve this to be used inside the callback
setInterval(function() { self.update(); }, 3000)

通常はあなたがしたことはうまくいくでしょうが、いくつかの(Geckoベースの)ブラウザはタイマーコールバック関数に引数を渡します。

于 2012-05-28T22:27:01.150 に答える
0

setInterval は、3 秒ごとに this.update を呼び出します。update にはオブジェクトへの参照 (this) がありますが、それが gameToDisplay でどのように渡されるかわかりません。

冗長に見えるので gameToDisplay を削除するか、displayedGame のようなインスタンス変数にして、update() とは別に設定します。

ほとんどの場合、これは null になりますが、Firefox は明らかに何らかのパラメーターを渡します。

于 2012-05-28T22:28:42.280 に答える