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