我正在编写一些与我不拥有的库代码交互的 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 超时的唯一信息仅与创建 viasetTimeout( function, time)
和删除 via相关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(函数,超时){ 超时[n = setTimeout(函数,超时)] = { 开始:新日期()。getTime(), 结束:新日期()。getTime()+超时 t:超时 } 返回 n; }
这在任何不是 IE 6 的浏览器中都非常有效。即使是最初的 iPhone,我希望事情会变得异步。