2010-12-08 5 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); 
} 

Добавлен jsfiddle пример для демонстрации запуска и остановки интервал

0

Может быть, вы просто хотите использовать SetTimeout() вместо этого, так что у вас есть элемент управления» вы ищете?

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. 
Смежные вопросы