23

この質問が以前にここで既に行われている場合は申し訳ありませんが、適切な回答が見つかりませんでした。

jQuery のように、スクリプト内のどこでも呼び出すことができる JavaScript のスリープ/遅延/待機関数を作成したいと考えています。.delay()

私はphpによって生成されたスクリプトを持っているのでsetTimeoutを使用することができず、それを2つの異なる関数に入れることができず、タイムアウトが途中にあります。私ができるようにする関数を作成する必要があります

alert("time started");
sleep(4000);
alert("time up");

は本当にjQueryを使いたくありません。

4

6 に答える 6

16

残念ながら、Javascript を一時停止する関数を入れることはできません。

使用する必要がありますsetTimeout()

例:

function startTimer () {
    timer.start();
    setTimeout(stopTimer,5000);
}

function stopTimer () {
    timer.stop();
}

編集:

ユーザーが生成したカウントダウンの場合も同様に簡単です。

HTML:

<input type="number" id="delay" min="1" max="5">

JS:

var delayInSeconds = parseInt(delay.value);
var delayInMilliseconds = delayInSeconds*1000;

function startTimer () {
    timer.start();
    setTimeout(stopTimer,delayInMilliseconds);
}

function stopTimer () {
    timer.stop;
}

startTimer()などの のトリガーを追加するだけですonchange

于 2013-10-15T19:21:46.287 に答える
2

現在のブラウザに実装されている JS では、指定したとおりの動作は不可能です。ごめん。

理論的には、ループの終了条件が時間に基づくループを持つ関数を作成できますが、これは CPU を占有し、ブラウザが応答しなくなり、非常に貧弱な設計になります。この例を書くことさえ拒否します;)


更新:私の回答は (不当に) -1 になりましたが、ES6 (ブラウザーにまだ実装されておらず、デフォルトで Node.js で有効になっていない) では、非同期コードを同期的に。そのためには、プロミスとジェネレーターが必要です。

たとえば、Q.spawn() を使用して Node.js でハーモニー フラグを使用するなど、今日でも使用できます。たとえば、このブログ投稿を参照してください (最後の例があります)。

于 2013-10-15T19:16:16.127 に答える
1

これを使用できます-

function sleep(milliseconds) {
    var start = new Date().getTime();
    for (var i = 0; i < 1e7; i++) {
        if ((new Date().getTime() - start) > milliseconds){
            break;
        }
    }
}
于 2015-02-13T05:19:47.833 に答える