0

このようなものを検索しようとしましたが、後で正確に何を見つけることができませんでした。これがすでにどこかで回答されている場合は申し訳ありません.

一定期間後ではなく、一定期間、少しのコードを実行する必要があります。基本的に、配列からランダムな値をページにすばやく表示したいのですが、これを1分間表示し続けてから停止したいのです。

以下のコードは 3 秒後にのみ開始され、停止せず、どうすればこれを達成できるかわかりません。

var messages = ["Good!", "Great!", "Awesome!", "Super!", "Nice!"];
    function getMessage() {
       return messages[Math.floor(Math.random() * messages.length)];
    }
    setTimeout(function () { oneSecondFunction(); }, 3000);
    function oneSecondFunction() {
        $('#test').html(getMessage());
        setTimeout('oneSecondFunction()', 100);
    }

ありがとう

4

5 に答える 5

2

フラグを設定する終了時間の 2 番目のタイムアウトを設定し、oneSecondFunctionフラグが設定されていない場合にのみ再スケジュールします。

var messages = ["Good!", "Great!", "Awesome!", "Super!", "Nice!"];
var stop = false;
function getMessage() {
   return messages[Math.floor(Math.random() * messages.length)];
}
setTimeout(function () {
    setTimeout(function () { stop = true; }, 60000); // one minute later
    oneSecondFunction();
}, 3000);
function oneSecondFunction() {
    $('#test').html(getMessage());
    if (!stop) {
        setTimeout('oneSecondFunction()', 100);
    }
}
于 2013-10-06T18:11:18.500 に答える
2

試す

var messages = ["Good!", "Great!", "Awesome!", "Super!", "Nice!"];

function getMessage() {
    return messages[Math.floor(Math.random() * messages.length)];
}

var interval = null;
setTimeout(function() {
    interval = setInterval(function() {
        // Your code here
        $("#test").html(getMessage());
    }, 100);

    //Stop the functions after 1 minute.
    setTimeout(function() { clearInterval(interval); }, 60 * 1000);
}, 3000);

これにより、3 秒後に間隔が作成され、1 分間 100 ミリ秒ごとにコードが実行されます。

于 2013-10-06T18:12:35.560 に答える
1

関数が実行されている時間を追跡するだけで済みます。次に、時間が経過したかどうかをテストします。これを行う方法の例を次に示します。

var messages = ["Good!", "Great!", "Awesome!", "Super!", "Nice!"],
    interval = 100,
    delay = 0;

    function getMessage() {
       return messages[Math.floor(Math.random() * messages.length)];
    }
    setTimeout(oneSecondFunction, 3000); // Less code is better.

    function oneSecondFunction() {
        $('#test').html(getMessage());
        delay+= interval;
        if (delay < (3 * 60 * 1000)) { // 3 minutes
             setTimeout(oneSecondFunction, interval);
        }
    }
于 2013-10-06T18:15:00.990 に答える
1

関数が最初に実行されてから経過した時間を追跡し、その期間が 1 分を超えた場合は、単にsetTimeout呼び出しを更新しないでください。

例えば:

var timeStarted;

function getMessage() {
   return messages[Math.floor(Math.random() * messages.length)];
}

setTimeout(function () { oneSecondFunction(); }, 3000);

function oneSecondFunction() {
    var now = Date.now();
    timeStarted = timeStarted || now;

    $('#test').html(getMessage());

    if (now - timeStarted < 60000) {
        setTimeout(oneSecondFunction, 100); // you can just write function's name
    }
}
于 2013-10-06T18:11:30.553 に答える
0

ループを作成するために oneSecondFunction から Timeout を設定しないでください。代わりに setInterval 関数を使用して、呼び出したい関数とスリープさせたい時間をそれに渡します。次に、間隔 ID を指定して clearInterval を呼び出して停止します。このような:

function getMessage() {
return messages[Math.floor(Math.random() * messages.length)];
}

 function oneSecondFunction() {
 $("#test").html(getMessage());
}
var intervalID = setInterval(oneSecondFunction, <Delay between runs in millis here>);
function stop() {
clearInterval(intervalID);
}
setTimeout(stop, 60000);
于 2013-10-06T18:35:57.000 に答える