首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javascript: pause setTimeout();

javascript: pause setTimeout();
EN

Stack Overflow用户
提问于 2010-10-19 22:36:21
回答 18查看 125.3K关注 0票数 130

如果我有一个通过var t = setTimeout("dosomething()", 5000)设置活动超时运行,

有没有什么方法可以暂停和恢复它?

有没有办法获得当前超时的剩余时间?

或者我必须输入一个变量,当设置了超时时,存储当前时间,然后我们暂停,得到现在和那时之间的差值?

EN

回答 18

Stack Overflow用户

回答已采纳

发布于 2010-10-19 23:02:04

您可以像这样包装window.setTimeout,我认为这与您在问题中提出的建议类似:

代码语言:javascript
复制
var Timer = function(callback, delay) {
    var timerId, start, remaining = delay;

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

    this.resume = function() {
        start = Date.now();
        window.clearTimeout(timerId);
        timerId = window.setTimeout(callback, remaining);
    };

    this.resume();
};

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

timer.pause();
// Do some stuff...
timer.resume();
票数 287
EN

Stack Overflow用户

发布于 2010-10-19 23:05:27

像这样的东西应该能起到作用。

代码语言:javascript
复制
function Timer(fn, countdown) {
    var ident, complete = false;

    function _time_diff(date1, date2) {
        return date2 ? date2 - date1 : new Date().getTime() - date1;
    }

    function cancel() {
        clearTimeout(ident);
    }

    function pause() {
        clearTimeout(ident);
        total_time_run = _time_diff(start_time);
        complete = total_time_run >= countdown;
    }

    function resume() {
        ident = complete ? -1 : setTimeout(fn, countdown - total_time_run);
    }

    var start_time = new Date().getTime();
    ident = setTimeout(fn, countdown);

    return { cancel: cancel, pause: pause, resume: resume };
}
票数 19
EN

Stack Overflow用户

发布于 2010-10-19 22:38:57

不是的。您将需要取消它(clearTimeout),测量自启动它以来的时间,并使用新时间重新启动它。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3969475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档