我正在尝试使用getTime为图库设置计时器。当我在imageWait()的else块期间添加警报时,此功能可以正常工作但没有警报没有任何反应。有什么想法吗?
milliseconds=null;
galleryLoop();
function galleryLoop(){
date=new Date();
startTime=date.getTime();
milliseconds=5000;
imageWait();
}
function imageWait(){
date=new Date();
currentTime=date.getTime();
if(startTime+milliseconds<=currentTime)
alert('made it')
else
imageWait();
}
答案 0 :(得分:0)
为什么不为此使用setTimeout
功能?
function galleryLoop(){
setTimeout(5000, imageWait());
}
function imageWait() {
//Whatever you need to do
}
答案 1 :(得分:0)
将警报语句添加到else子句时,其工作原理是,警报是阻止调用,这意味着在创建警报窗口时,JavaScript执行停止。也就是说,当警报语句出现时,它允许挂钟时间增加(再次,当现实世界中的时间推进时没有JS执行)并且一旦警报被清除,if语句最终就会得到满足。这也意味着如果您足够快地清除警报,您可能会遇到与以前相同的问题。
通常会发生什么 - 没有警告声明 - 是JS引擎在5000ms延迟期间处理对imageWait的多次调用并最终达到最大调用堆栈大小 - 如果你愿意,堆栈溢出 - 并抛出错误
正确的解决方案是使用setTimeout延迟此函数:
var galleryTimeout = 0;
function galleryLoop(){
//Process current image
galleryTimeout = setTimeout(galleryLoop, 5000);
}
//Some time later, when done with the gallery
clearTimeout(galleryTimeout);