admin管理员组

文章数量:1393092

I have a setInterval function

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

I want to call the setInterval later again, what's the best way to do that?

I have a setInterval function

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

I want to call the setInterval later again, what's the best way to do that?

Share Improve this question edited Feb 25, 2012 at 11:48 switz asked Dec 8, 2010 at 0:48 switzswitz 25.3k27 gold badges79 silver badges105 bronze badges 3
  • Call it again the same way you did the first time? I don't understand the question. – Dan Grossman Commented Dec 8, 2010 at 0:49
  • So you want updates to happen if #addNewJuiceBox is visible? – Ruan Mendes Commented Dec 8, 2010 at 1:09
  • I want it to stop running if addNewJuicebox is visible, then in another function, I want to call the setInterval to start up again. – switz Commented Dec 8, 2010 at 1:13
Add a ment  | 

4 Answers 4

Reset to default 4

Try breaking your code up into the storage of the interval and the setting.

var auto_refresh = "";

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

Added a jsfiddle example for demonstrating starting and stopping an interval

  • http://jsfiddle/Jf8PT/

This may be what you're looking for

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.

clearInterval takes in a reference to the timer that you want to clear, you need to pass that in to it:

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();

Maybe you just want to use setTimeout() instead, so that you have the control you're looking for?

本文标签: javascriptclearInterval() then call interval againStack Overflow