Вызов с интервалом после его остановки

#javascript

#javascript

Вопрос:

В javascript, если вы задаете переменной интервал и очищаете его, есть ли способ снова включить его? Спасибо. Если вам нужен код, пожалуйста, спросите. Я пытался просто ввести имя интервала, но это возвращает число. Я также пробовал использовать его как функцию, которая возвращает ошибку.

 var on = false;
var time = 0

function toggle() {
  if (on === false) {
    start()
    on = true
  } else {
    stop()
    on = false
  }
}

function start() {
  var interval = window.setInterval(function() {
    add()
  }, 1000)
  console.log('1')

}

function stop() {
  clearInterval(interval);
  console.log('2')
}

function add() {
  time = time   1;
  document.getElementById('time').innerHTML = time;
}  
 <div id='time'></div>
<button onClick="toggle()">Toggle</button>  

Комментарии:

1. Не совсем, вам придется снова явно вызывать setInterval

2. Конечно, нам нужна эта часть кода, как еще мы можем узнать ваш точный сценарий?

3. @CME64 Я добавил код

4. Вы все еще можете протестировать переменную включения / выключения в функции interval, но это будет потреблять ресурс, поскольку интервал все равно будет срабатывать

5. @CertainPerformance Так что, мне просто нужно переопределять его каждый раз в функции, как указано выше?

Ответ №1:

Переместите ваш код, который запускает setInterval, в функцию.

Очистите интервал, а затем вызовите функцию снова.

Как только вы очистите интервал, вы не сможете перезапустить его.

Ответ №2:

Я не думаю, что вам нужно очищать и устанавливать снова интервал.

Как насчет такого подхода:

 var start = document.getElementById('start')
var stop = document.getElementById('stop')
var time = document.getElementById('time')
var isRunning = false

start.onclick = function() {
  isRunning = true
}

stop.onclick = function() {
  isRunning = false
}


function func() {
  if (isRunning) {
    time.innerHTML =  time.innerHTML   1
  }
}
setInterval(func, 1000)  
 <button id="start">start</button>
<button id="stop">stop</button>
<div id="time">0</div>  

Ответ №3:

ваш код уже поддерживает запрашиваемую функциональность. вы просто не останавливаете интервал, как упоминал sabithpocker, из-за interval области видимости переменной. просто используйте start() всякий раз, когда захотите продолжить. поскольку add() функция использует глобальную переменную time , то не имеет значения, остановили ли вы ее и захотели ли, чтобы она воссоздала интервал позже. также я немного улучшил назначение флага переключения.

Я также рекомендую уменьшить количество определенных функций. вы можете поместить всю эту логику в одну функцию или внедрить ее из вызывающей для большей динамичности.

 var on = false,interval;
var time = 0

function toggle() {
  on=!on;
  if (on == true) {
    start();
  } else {
    stop();
  }
}

function start() {
  interval = window.setInterval(function() {
    add()
  }, 1000)
  console.log('1')

}

function stop() {
  clearInterval(interval);
  console.log('2')
}

function add() {
  time = time   1;
  document.getElementById('time').innerHTML = time;
}  
 <div id='time'></div>
<button onClick="toggle()">Toggle</button>