2010-12-08 86 views
1

我有一個setInterval函數clearInterval();然後再次調用間隔

var auto_refresh = setInterval(function() { 
    if ($('#addNewJuicebox:visible')) { 
    clearInterval(); 
    } 
    //rest of function 
}, 8000); // refresh every 5000 milliseconds 

我想稍後再次致電setInterval的,什麼是應該做的最好的方法?

+0

呼叫它再次像你第一次那樣?我不明白這個問題。 – 2010-12-08 00:49:22

+0

因此,如果#addNewJuiceBox可見,您希望更新發生? – 2010-12-08 01:09:27

+0

如果addNewJuicebox可見,我希望它停止運行,然後在另一個函數中,我想調用setInterval來重新啓動。 – switz 2010-12-08 01:13:20

回答

4

嘗試將代碼分解爲間隔和設置的存儲。

var auto_refresh = ""; 

function startRefresh() { 
    if (auto_refresh != "") { 
    // already set 
    return; 
    } 
    auto_refresh = setInterval(function() { 
    if ($('#addNewJuicebox:visible')) { 
     clearInterval(auto_refresh); 
     auto_refresh = ""; 
    } 
    }, 8000); 
} 

新增用於演示啓動和停止的時間間隔

0

也許你只是想使用的setTimeout()來代替,讓你有控制你的jsfiddle例如」重新找?

1

clearInterval發生在到要清除的計時器的引用,你需要傳遞,在它:

var auto_refresh = null; 
var refresh = function() { 
    if ($('#addNewJuicebox').is(':visible')) { 
     clearInterval(auto_refresh); 
     auto_refresh = null; 
    } 
}; 
var start_refreshing = function() { 
    if(auto_refresh != null) return; 
    auto_refresh = setInterval(refresh, 8000); 
}; 
start_refreshing(); 
1

這可能是你在找什麼

Function TaskRunner(run, interval) { 
    this._taskId = null; 
    this._run = run; 
    this._interval = interval 
} 

TaskRunner.prototype.start = function(){ 
    if (this._taskId) { 
    return; // Already running 
    } 
    this._taskId = setInterval(this._taskId, this._interval); 
} 

TaskRunner.prototype.stop = function(){ 
    if (!this._taskId) { 
    return; // Not running 
    } 
    clearInterval(this._taskId); 
    this._taskId = null; 
} 


var task = new TaskRunner(
    function(){ 
    if ($('#addNewJuicebox:visible')) { 
     task.stop(); 
    } 
    // Do the update  
    }, 5000); 

Now you can call `task.start()` from anywhere in your code to restart it. 
相關問題