#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>