3

ランダムな時間にランダムな画像を読み込もうとしています。何らかの理由で、これは時間をランダム化していませんが、画像はランダム化しています。何が問題なのですか?

    var randomTime2 = 3000; //initialize the random time with this value to start

setInterval(function(){
    var randomNum = Math.floor((Math.random()*3)+1);//random num for image

    $('.recent-project2 img').fadeTo('slow',0,function(){
            var randomImg = "img/recent-projects-"+randomNum+".jpg";

            $('.recent-project2 img').attr('src',randomImg);
            $('.recent-project2 img').fadeTo('slow',1);

        });
    randomTime2 = Math.floor(Math.random()*10000);//reset random time
    return randomTime2; //return random time
    },randomTime2);
4

3 に答える 3

4

ランダムな時間で関数の最後に使用setTimeoutして再トリガーします。

于 2013-06-20T18:11:52.780 に答える
2

このsetInterval呼び出しは、予想される遅延期間が経過したときにコードを呼び出すことを忘れないように、関数と必要な間隔を内部テーブルに追加するだけです。ただし、間隔を指定するために使用される変数を変更しても、これは内部テーブルに影響を与えないことに注意してください。その値は呼び出し時に読み取られsetInterval、現在は保存されています。

コールバック時間をランダム化するには、関数に名前を付けて、setTimeout代わりに使用しsetIntervalます。

function MyCallback() {
    ...
    setTimeout(myCallback, new_delay);
}

setTimeout(myCallback, first_delay);

各呼び出しでこのアプローチを使用すると、次の呼び出しまでに異なる遅延を決定できます。

于 2013-06-20T18:15:38.730 に答える
1

参照ではなく値渡しであるため、関数内で randomTime2 の値を変更することはできません。

setInterval(someFunction, someNumberValue)

このコード行は、someNumberValue- milisecondsごとにsomeFunction を呼び出します。値は動的に更新されません。

これを機能させる方法はたくさんありますが、単純にsetTimeoutを使用して、someFunction の最後で再度呼び出すことをお勧めします。例えば:

//psudo-code, might not actually run, just showing you the general idea.
var someFunction = function(){
    console.log("Whatever.");
}

var repeatFunction = function(){
    someFunction()
    var timeoutID = window.setTimeout(repeatFunction, Math.random()*10000);
}

repeatFunction(); //Starts the loop.
于 2013-06-20T18:17:51.253 に答える