定时器功能使用get time功能问题

时间:2014-01-15 04:54:32

标签: javascript image timer gallery gettime

我正在尝试使用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();
}

2 个答案:

答案 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);