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

时间:2011-07-06 01:39:09

标签: javascript jquery

我的代码:

$(function() {

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


     $('a.next').click(function() {     
          if (startSlideShow) {
               clearInterval(startSlideShow);
          }
          nextSlide();
     });

});

我的意图:

如果用户点击startSlideshow链接,幻灯片功能每1秒执行一次。

如果用户点击下一个链接,幻灯片功能将在已经执行的情况下停止。

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

          if (startSlideShow) {
               clearInterval(startSlideShow);
          }

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

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

      if (startSlideShow) {
           clearInterval(startSlideShow);
      }

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

3 个答案:

答案 0 :(得分:3)

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

$(function() {
     var startSlideShow;

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


     $('a.next').click(function() {     
          if (startSlideShow) {
               clearInterval(startSlideShow);
          }
          nextSlide();
     });

});

在点击功能之外定义变量。

答案 1 :(得分:3)

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

var startSlideShow = null;

稍后再说清楚:

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

答案 2 :(得分:2)

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

您应该将其包含在闭包中并使用 var 声明它。