У меня есть 3 setInterval функции, объявленные глобально, 2 из них работают, другой не работает независимо от того, что я делаю. Я использую отдельную функцию, чтобы очистить интервалы (функция ClearintervalTime()), которая называется в StopGame()setInterval не работает, когда объявляется глобальным
var clearIntervalvariable0, clearIntervalvariable1, clearGameInterval1=null;
function gameDuration() {
counter = 90;
clearGameInterval1 = setInterval(gameDurationCounter, 1000);
function gameDurationCounter() {
counter--;
document.getElementById('timer').innerText = 'Time remaining:' + counter;
speed();
if (counter == 0) {
stopGame();
// clearInterval(clearGameInterval1);
console.log('game was stopped');
};
};
};
function ClearintervalTime() {
clearInterval(clearGameInterval1);
clearInterval(clearIntervalvariable0);
clearInterval(clearIntervalvariable1);
};
function stopGame() {
bubbles.length = 0;
noLoop();
ClearintervalTime();
};
Этот код не работает независимо от того, что я делаю, только чтобы сделать его работа если я объявляю clearGameInterval1 локально в gameDuration(), а затем закрою его в функции закрытия gameDurationCounter() с прокомментированной строкой. У меня есть кнопка остановки игры, и я хочу закрыть интервал не только тогда, когда счетчик достигнет 0, но и на кнопке buttonclick. Если я оставлю код, как указано выше, счетчик даже не запустится, если я прокомментирую clearInterval (clearGameInterval1); в ClearintervalTime() счетчик начнется, но я не могу остановить/очистить его ... Я собираюсь решить это. Нет других переменных или функций с тем же именем, и я попытался получить gameDurationCounter() снаружи (не в закрытии) того же эффекта. Может кто-нибудь, пожалуйста, скажите мне, что происходит, что происходит не так?
И как называется 'gameDuration'? Если вы продолжаете вызывать эту функцию, не очищая сначала интервал, он добавляет новый интервал к глобальному, и обработчик для старого интервала будет потерян, и он больше не будет очищен. – adeneo
У вас есть несколько игр, работающих в одно и то же время, или может работать только одна игра в то время? Этот вопрос будет намного яснее, если вы предоставите фрагмент, который может быть запущен и который воспроизводит проблему. – trincot
набор clearGameInterval1 до 0 и проверить – Geeky