2013-07-02 88 views
1

我想在點擊一個按鈕後調用一個Javascript函數,讓它每100毫秒循環1.5秒,然後暫停它。每隔x秒調用一次Javascript函數並在y秒後停止?

這個想法是,我想讓這個手風琴滑塊能夠使用這個自定義jQuery滾動條顯示可滾動內容(我不知道任何其他更好的自定義跨瀏覽器滾動條)。

滾動條必須使用此功能在每次用戶點擊的項目之一,利用這段時間來重構:

$(".ac-big").customScrollbar("resize") 

爲了使運行平穩的過渡,我用的setInterval如下面的例子:

<script type="text/javascript"> 
$(window).load(function() { 
$(function(){ 
    setInterval(function(){ 
    $(".ac-big").customScrollbar("resize") 
},100); 
}); 
</script> 

問題是腳本非常耗費資源。沒有必要每100毫秒運行一次。只有在用戶點擊一個單選按鈕後,我纔會讓它每100毫秒運行1.5秒。

這是另一個問題。由於手風琴滑塊是使用單選按鈕構建的,因此如何在單選按鈕上調用javascript函數單擊?

我已經將setTimeout和setInterval插入到標籤中,因爲我相信我必須使用這兩個組合。如果我擁有所有必需的構建塊,我不會在這裏浪費您的時間。

+3

因爲您標記了'setTimeout'和'setInterval',顯然您已經擁有了所有您需要的基本構建塊。你還需要什麼?告訴我們你的嘗試。 –

+0

我編輯了這個問題。希望現在適合現場條件。謝謝! –

+2

請不要鏈接到私人網絡服務器上託管的頁面。如果你真的想*補充*你的問題與現場演示,考慮jsfiddle,但你的問題需要自包含和答覆,而不連接到任何場外代碼 – meagar

回答

4

有鑑於此:

我想點擊一個按鈕後,調用JavaScript函數,使之環每100毫秒1,5秒鐘,然後暫停。

這應做到:http://jsfiddle.net/pUWHm/

// I want to call a Javascript function after clicking a button 
$('.button').click(function() { 
    var started = Date.now(); 

    // make it loop every 100 milliseconds 
    var interval = setInterval(function(){ 

    // for 1.5 seconds 
    if (Date.now() - started > 1500) { 

     // and then pause it 
     clearInterval(interval); 

    } else { 

     // the thing to do every 100ms 
     $(".ac-big").customScrollbar("resize") 

    } 
    }, 100); // every 100 milliseconds 
}); 

的策略是,當你點擊按鈕啓動的時間間隔,並保存該區間ID。你開始時也可以省錢。每次間隔運行時,檢查它是否足夠長。如果還沒有時間,那就做吧。如果時間到了,請清除間隔,以免再次觸發。

+0

我喜歡你的代碼,但不會更容易只是做'我++'? – Jonathan

+0

你可以,但是如果你改變頻率並忘記計算'i'的新的最大值?有很多種方法可以做到這一點,而且我通常會選擇一種方式,至少一年後會讓我陷入困境。 –

+0

你讓同一個計時器運行一年,看看它與去年相比有多少次迭代;) – Jonathan