首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JavaScript getTimeout?

JavaScript getTimeout?
EN

Stack Overflow用户
提问于 2018-03-22 05:00:38
回答 2查看 0关注 0票数 0

JavaScript中的window.setTimeout(和相关的setInterval)函数允许您安排将来某个时候执行的函数:

代码语言:javascript
复制
id = setTimeout(function, delay);

其中“延迟”是您想要调用函数的未来毫秒数。在这段时间过去之前,您可以使用以下命令取消定时器:

代码语言:javascript
复制
clearTimeout(id);

我想要的更新计时器。我希望能够提前或推迟一个定时器,使得该函数被调用x毫秒比原计划。

如果有一个getTimeout方法,您可以执行如下操作:

代码语言:javascript
复制
originally_scheduled_time = getTimeout(id);
updateTimeout(id, originally_schedule_time + new_delay);  // change the time

但据我所知,没有任何像getTimeout或任何方式来更新现有的计时器。

有没有办法访问预定警报列表并修改它们?

有更好的方法吗?

EN

Stack Overflow用户

发布于 2018-03-22 13:28:43

如果你真的想要这种功能,你需要自己写。

你可以为setTimeout调用创建一个包装器,它将返回一个可用于“推迟”定时器的对象:

代码语言:javascript
复制
function setAdvancedTimer(f, delay) {
  var obj = {
    firetime: delay + (+new Date()), // the extra + turns the date into an int 
    called: false,
    canceled: false,
    callback: f
  }; 
  // this function will set obj.called, and then call the function whenever
  // the timeout eventually fires.
  var callfunc = function() { obj.called = true; f(); }; 
  // calling .extend(1000) will add 1000ms to the time and reset the timeout.
  // also, calling .extend(-1000) will remove 1000ms, setting timer to 0ms if needed
  obj.extend = function(ms) {
    // break early if it already fired
    if (obj.called || obj.canceled) return false; 
    // clear old timer, calculate new timer
    clearTimeout(obj.timeout);
    obj.firetime += ms;
    var newDelay = obj.firetime - new Date(); // figure out new ms
    if (newDelay < 0) newDelay = 0;
    obj.timeout = setTimeout(callfunc, newDelay);
    return obj;
  };
  // Cancel the timer...  
  obj.cancel = function() {
    obj.canceled = true;
    clearTimeout(obj.timeout);
  };
  // call the initial timer...
  obj.timeout = setTimeout(callfunc, delay);
  // return our object with the helper functions....
  return obj;
}

var d = +new Date();
var timer = setAdvancedTimer(function() { alert('test'+ (+new Date() - d)); }, 1000);

timer.extend(1000);
// should alert about 2000ms later
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100007726

复制
相关文章

相似问题

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