1. ホーム
  2. javascript

[解決済み] javascript: setTimeout() を一時停止してください。

2022-07-07 16:48:31

質問

アクティブなタイムアウトを設定するために var t = setTimeout("dosomething()", 5000) ,

一時停止や再開はできないのでしょうか?


現在のタイムアウトの残り時間を取得する方法はありますか?

それとも、タイムアウトが設定されたときに、変数に現在の時間を格納し、その後、一時停止して、現在との差を取得しなければならないのでしょうか?

どのように解決するには?

ラップ window.setTimeout をこのようにラップすることができます。これは、あなたが質問で提案していたことに似ていると思います。

var Timer = function(callback, delay) {
    var timerId, start, remaining = delay;

    this.pause = function() {
        window.clearTimeout(timerId);
        timerId = null;
        remaining -= Date.now() - start;
    };

    this.resume = function() {
        if (timerId) {
            return;
        }

        start = Date.now();
        timerId = window.setTimeout(callback, remaining);
    };

    this.resume();
};

var timer = new Timer(function() {
    alert("Done!");
}, 1000);

timer.pause();
// Do some stuff...
timer.resume();