我正在编写一些Javascript,该Javascript与我不拥有的并且不能(合理地)更改的库代码交互。它创建Javascript超时,用于显示一系列限时问题中的下一个问题。这不是真正的代码,因为它被所有的希望所迷惑。库正在执行以下操作:
....
// setup a timeout to go to the next question based on user-supplied time
var t = questionTime * 1000
test.currentTimeout = setTimeout( showNextQuestion(questions[i+1]), t );
我想在屏幕上放置一个进度条,questionTime * 1000
通过查询由创建的计时器来填充进度条setTimeout
。唯一的问题是,似乎没有办法做到这一点。getTimeout
我有缺少的功能吗?我可以找到的有关Javascript超时的唯一信息仅与通过创建setTimeout( function, time)
和通过删除有关clearTimeout( id )
。
我正在寻找一个函数,该函数返回超时触发前的剩余时间或调用超时后经过的时间。我的进度条代码如下所示:
var timeleft = getTimeout( test.currentTimeout ); // I don't know how to do this
var $bar = $('.control .bar');
while ( timeleft > 1 ) {
$bar.width(timeleft / test.defaultQuestionTime * 1000);
}
tl; dr:如何找到javascript setTimeout()之前的剩余时间?
这是我现在正在使用的解决方案。我遍历了负责测试的库部分,并且对代码进行了解读(这很糟糕,并且未经我的许可)。
// setup a timeout to go to the next question based on user-supplied time
var t = questionTime * 1000
test.currentTimeout = mySetTimeout( showNextQuestion(questions[i+1]), t );
这是我的代码:
// setTimeout的包装器 函数mySetTimeout(func,timeout){ 超时[n = setTimeout(func,timeout)] = { 开始:new Date()。getTime(), 结束:新的Date()。getTime()+超时 t:超时 } 返回n; }
在不是IE 6的任何浏览器中,这种方法都可以正常工作。