如果我有一个通过var t = setTimeout("dosomething()", 5000)设置活动超时运行,
有没有什么方法可以暂停和恢复它?
有没有办法获得当前超时的剩余时间?
或者我必须输入一个变量,当设置了超时时,存储当前时间,然后我们暂停,得到现在和那时之间的差值?
发布于 2010-10-19 23:02:04
您可以像这样包装window.setTimeout,我认为这与您在问题中提出的建议类似:
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();发布于 2010-10-19 23:05:27
像这样的东西应该能起到作用。
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 };
}发布于 2010-10-19 22:38:57
不是的。您将需要取消它(clearTimeout),测量自启动它以来的时间,并使用新时间重新启动它。
https://stackoverflow.com/questions/3969475
复制相似问题