2014-01-15 25 views
0

我正在尝试使用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

如何代码看起来就像没有报警?大括号会发生什么?为什么没有声明任何变量?他们是否想成为全球? – elclanrs

回答

0

之所以当您添加警告语句else子句这部作品是警报是阻塞呼叫意味着使用JavaScript创建一个警告窗口时停止。也就是说,当警报声明出现时,它允许挂钟时间增加(再次,当真实世界中的时间没有进行时JS没有执行),并且一旦警报被清除,if语句最终被满足。这也意味着,如果您清除警报的速度足够快,则可能会遇到与以前一样的问题。

通常会发生什么 - 没有警报声明 - 是在JS引擎在5000毫秒延迟期间处理多个对imageWait的调用,并最终达到最大调用堆栈大小 - 堆栈溢出(如果您愿意) - 并抛出一个错误。

正确的解决办法是推迟使用的setTimeout此功能:

var galleryTimeout = 0; 

function galleryLoop(){ 
    //Process current image 
    galleryTimeout = setTimeout(galleryLoop, 5000); 
} 

//Some time later, when done with the gallery 
clearTimeout(galleryTimeout); 
+0

谢谢你现在工作正常。 – Jesse

+0

没问题,高兴帮忙:) – kaminari

0

你为什么不使用这个功能setTimeout

function galleryLoop(){ 
    setTimeout(5000, imageWait()); 
} 

function imageWait() { 
    //Whatever you need to do 
}