0

HTML と Javascript の単純なプロジェクトに取り組んでいます。タイマーに問題があります。

Date()2 つのオブジェクト間の秒数を計算しています。2秒ごとに、新しい乱数を取得したいと考えています。100 ミリ秒ごとに実行する があり、2 秒のマークを過ぎると、ステートメントsetInterval内のコードが実行されます。if

だから私の質問は: 100 ミリ秒ごとに実行されるa 内にあるステートメントで
、コードが 2 秒に 1 回だけ実行されるようにするにはどうすればよいですか?ifsetInterval()

コードは次のとおりです。

var startTime = new Date();
var endTime = new Date();

var randomNumber = 0;

var gameTimer = setInterval(function(){
    //calculate seconds;
    var secondsPassed = Math.round( (endTime - startTime) / 1000 );

    if(modulo(secondsPassed,2) == 0){
        //when the "gate" is open this keep executing every 100 mili seconds.
       //but i want it to execute only once every 2 seconds.
        randomNumber = Math.floor(Math.random()*lanes.length);
        $(lanes[randomNumber]).append(box);
    }

    endTime = new Date();
}, 100);

var modulo = function (n, m) {
    var remain = n % m;
    return Math.floor(remain >= 0 ? remain : remain + m);
};
4

1 に答える 1

3

ダブルインターバルタイマーを求めていると思います。

var interval = 100, beat = 2000, ticks = 0;
var timer = setInterval(function(){
    runsEvery100ms(); // ««« Code here runs every 100 ms.
    if (ticks > 0 && ticks % beat === 0) {
        runsEvery2000ms(); // ««« Code here runs every 2000 ms.
        ticks = 0;
    }
    ticks += interval;
}, interval);

ここでデモフィドル。

于 2013-02-21T00:23:44.453 に答える