1

以前、JavaScript コードで何かを修正する方法について助けを求めましたが、現在は修正されていますが、私のコードに問題はありますか? 最後のアレイは 1 秒以上オンのままなので、5 秒ほどオンのままです。これは、配列をリセットしているためですか、それとも Javascript では正常ですか?

function Background()
{
    var Backgrounds = [
        '#333', '#777', '#999', '#CCC'
    ],
    Max_Backgrounds = Backgrounds.length, 
    Background_Stage = -1;// Yes, it's meant to be -1 so when background_stage++; is called it will make it 0 thus start at the beginning of the array.
    setInterval(function() { 
        if(Background_Stage >= Max_Backgrounds) Background_Stage = -1;
            $('body').css('background', Backgrounds[Background_Stage++]); 
    }, 1000);
}
4

3 に答える 3

2

コメントで指摘されているように、最後の反復で背景を変更していないため、他の反復よりも長く残るため、一貫性を保つ必要があります

作業例: http://jsfiddle.net/uRSC5/

function background() {
    var backgrounds = [
        /*"./../../Styles/Callum_Project1/Images/Background_1",
        "./../../Styles/Callum_Project1/Images/Background_2",
        "./../../Styles/Callum_Project1/Images/Background_3"*/
        '#333', '#777', '#999', '#CCC'
    ];

    var count = backgrounds.length;
    var i = 0;

    setInterval(function() { 
        $('body').css('background', backgrounds[i++]); 
        if(i >= count) i = 0;
    }, 1000);
}

$(background);
于 2013-09-10T17:47:53.723 に答える
0
$('body').css('background', Backgrounds[Background_Stage++]);

と同等です

$('body').css('background', Backgrounds[Background_Stage]);
Background_Stage = Background_Stage + 1;

ループのたびに、背景が未定義に設定されています。アクセスされるに変数をインクリメントしたい場合は、使用する必要があります

$('body').css('background', Backgrounds[++Background_Stage]);

完全な例 (条件も変更された場合):

function Background()
{
    var Backgrounds = [
        '#333', '#777', '#999', '#CCC'
    ],
    Max_Backgrounds = Backgrounds.length, 
    Background_Stage = -1;// Yes, it's meant to be -1 so when background_stage++; is called it will make it 0 thus start at the beginning of the array.
    setInterval(function() { 
        if(Background_Stage >= Max_Backgrounds - 1) Background_Stage = -1;
            $('body').css('background', Backgrounds[++Background_Stage]); 
    }, 1000);
}
于 2013-09-10T19:39:44.247 に答える
0

-1 初期化を行わず、むしろモジュールを使用することをお勧めします。つまり3 % 2 == 1、除算の剰余が得られます。

http://jsfiddle.net/KtsHa/1/

(function Background () {
    var Backgrounds = [
        '#333', '#777', '#999', '#CCC'
    ],
    Max_Backgrounds = Backgrounds.length, 
    Background_Stage = 0,
    changeBackground = function () {
        $('body').css('background', Backgrounds[Background_Stage]); 
        Background_Stage = (Background_Stage + 1) % Max_Backgrounds;                
    };
    changeBackground(); // Remove this line if what you intend is to wait one second before the first change
    setInterval(changeBackground, 1000);
}());

また、setInterval はドリフトすることが知られているため、setTimeout を使用して 1 秒後にもう一度実行します: http://jsfiddle.net/KtsHa/2/

(function () {
    var Backgrounds = [
        '#333', '#777', '#999', '#CCC'
    ],
    Max_Backgrounds = Backgrounds.length, 
    Background_Stage = 0,
    changeBackground = function () {
        $('body').css('background', Backgrounds[Background_Stage]); 
        Background_Stage = (Background_Stage + 1) % Max_Backgrounds;
        setTimeout(changeBackground, 1000);
    };
    changeBackground();
}());
于 2013-09-10T19:27:41.493 に答える