我正在编写一些 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);
}
医生: 如何查找 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 );
我的原则是:
// wrapper for setTimeout function mySetTimeout( func, timeout ) { timeouts[ n = setTimeout( func, timeout ) ] = { start: new Date().getTime(), end: new Date().getTime() + timeout t: timeout } return n; }
这在任何不是 IE6的浏览器中都能很好地工作。甚至是最初的 iPhone,我原以为事情会变得异步。