2010-12-01 51 views
7

我正在使用jQuery構建的ui選項卡上工作。除了一個問題,一切都可以工作 - 我做了一個setInterval,它運行一個觸發器(「單擊」)的函數,以便它在5000毫秒後進入下一個選項卡。它貫穿每個選項卡都很好,問題是如果用戶手動點擊選項卡,則setInterval的定時器不會從0重新開始。例如,如果用戶要在0毫秒的tab1上啓動,並且在2000毫秒,setInterval不會回到0,它將從2000開始並運行到5000毫秒,然後轉到tab3。我明白爲什麼會發生,我只是想知道是否有辦法重新啓動setInterval時間,而不必執行clearInterval()並創建一個全新的setInterval()。任何洞察力將不勝感激。在Javascript/jQuery中重新啓動setInterval()(不帶clearInterval)

更新

感謝您的答覆 - 我試圖避免使用clearInterval是因爲我有一個如何編寫代碼的方式,其中調用clearInterval將完全停止setInterval的問題的原因。代碼設置爲跟蹤用戶何時點擊了一個標籤。問題是自動更改函數使用觸發器('click'),因此它會在選項卡自動更改時運行我寫的clearInterval函數。它似乎自行運行得相當好,但一旦用戶開始點擊標籤,setInterval的表現異常並且不可預測地切換標籤。我懷疑發生了什麼是幾個setIntervals同時運行......這裏的代碼(如果你還沒有猜到它,我很新的JavaScript/jQuery)。我已經評論了部件,以便它可以正常工作,但它仍然不能按我的意圖工作(從第一篇文章開始)。

// auto change tabs 
      if(options.interval) { 

       function timerCom() { 
        if(!$(".controller").hasClass('paused')) { 
         var i = $(".tab-current > a").attr("rel"); 
         //alert(i); 
         if(i == 3) {i = 0}; 
         $container 
          .find('a') 
          .eq(i) 
          .trigger('click'); 
        }  
       } 

       //$("#promo-items > li > a").click(function() { 
        //var timer; 
        //if(timer != null) {clearInterval(timer);} 
        timer = setInterval(timerCom, options.interval); 

       //}); 

      } 
+0

歡迎來到SO!如果您需要提供更多信息,請修改您的問題。針對有關答案的特定問題使用評論。 SO不是論壇,答案字段嚴格保留給問題的答案。 – 2011-02-23 14:23:14

回答

8

不,沒有辦法在不清除定時器的情況下重新啓動由setInterval設置的定時器。

3

你不能真正改變間隔或超時,只能清除它們。也就是說創建一個清除間隔的函數應該是一件簡單的事情,然後立即用新的時間值開始一個新的但相同的函數。

var intervalID; 
var resetTimer = function() { 
    if (intervalID) { clearInterval(intervalID) }; 
    intervalID = setInterval(function() { 
    console.log('doing stuff!'); 
    }, 5000); 
}; 
+5

使用大括號的方式使得代碼幾乎不可讀:P。大括號應該有自己的路線 – 2010-12-01 19:26:34

1
timer = setInterval(function() { 
    timerCom(); 
}, options.interval); 
0

我知道這個帖子是很好超過2歲,但我剛纔碰到了類似的問題,我找到了解決辦法。

我正在寫的圖像滾動,將在設定的時間量之後自動地轉移到下一個圖像,並且每當我點擊導航按鈕,過渡移動雙時間。

這裏是我的解決方案:

充分利用間隔變量(timer你的情況),有些全球性的。

即在options部分(假設它在前面定義,然後在後面分配),添加一個空變量timer變量。

var options = { 
'interval', 
//Other variables 
'timer', 
}; 

然後,在處理單擊事件時調用clearInterval兩次。

$("#promo-items > li > a").click(function() { 

if(options.timer != null) { 
clearInterval(options.timer); 
clearInterval(options.timer); 
} 

options.timer = setInterval(timerCom, options.interval); 

}); 

工作就像一個魅力對我來說。

同樣,如果抱歉,這是wayyyy爲時已晚。

相關問題