如何在javascript中做一个明确的间隔?

我的代码:

$(function() { $('a.startSlideshow').click(function() { startSlideShow = window.setInterval(function() { slideSwitch() }, 1000); }); $('a.next').click(function() { if (startSlideShow) { clearInterval(startSlideShow); } nextSlide(); }); }); 

我的本意:

如果用户单击startSlideshow链接,则幻灯片放映function每1秒执行一次。

如果用户单击下一个链接,则幻灯片显示function将在已经执行的情况下停止。

为了能够检测到这一点,我将设置间隔存储为变量。 但是,当我检查它时:

  if (startSlideShow) { clearInterval(startSlideShow); } 

它不起作用。 现在,如果我点击下一步之前单击开始幻灯片链接,我的代码就可以工作了。 但是,如果幻灯片function从未启动(即我从未点击过该链接,但从开始时点击了下一步),则代码失败。

基本上这是因为在没有定义startSlideshow var时导致代码因某些原因而中断:

  if (startSlideShow) { clearInterval(startSlideShow); } 

我确实尝试了其他方法来检查是否已设置该变量,但都失败了。 怎么解决这个?

在第一个处理程序之前声明startSlideShow

 var startSlideShow = null; 

并在以后清楚:

 if (startSlideShow) { window.clearInterval(startSlideShow); startSlideShow = null; } 

我相信你有一个范围问题:

 $(function() { var startSlideShow; $('a.startSlideshow').click(function() { startSlideShow = window.setInterval(function() { slideSwitch() }, 1000); }); $('a.next').click(function() { if (startSlideShow) { clearInterval(startSlideShow); } nextSlide(); }); }); 

在单击函数之外定义变量。

那是因为你没有声明startSlideShow ,所以在运行start函数之前它不存在。 此时,它变为具有值的全局变量。

你应该把它包含在一个闭包中并用var声明它。