@JIakki

Почему код не работает ?

var snake = { 
     interval : {
		right : function (start){
			var inter = setInterval(snake.functions.moveRight, 500)
			
			if( start == "stop"){
				clearInterval(inter);
			}

		}
	}
}
snake.interval.right()
snake.interval.right("stop")

почему интервал не останавливается?
  • Вопрос задан
  • 2414 просмотров
Решения вопроса 1
@friday
При каждом вызове функции объявляется новая переменная и создаётся новый интервал. Интервал-то останавливается, но не тот, который был создан при предыдущем вызове, а новый.

var snake = { 
     interval : {
		right : function (start){
			if( start == "stop"){
				clearInterval(this.inter);
			} else {
				this.inter = setInterval(function(){}, 500)
			}
		}
	}
};

snake.interval.right();
snake.interval.right("stop");


В этом случае id интервала будет лежать в snake.interval.inter, и вызов с "stop" будет останавливать именно его.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
nobodynoone
@nobodynoone
Потому что когда вы обращаетесь с параметром 'stop', то вы все равно запускаете бесконечный цикл и естественно скрипт до проверки на start=='stop' не доходит.

Вам нужно создать общий элемент и 2 функции для старта и стопа. Подробнее и даже с примерами на стеке вот по этой ссылочке.
Ответ написан
Комментировать
zBit
@zBit
Full stack web developer
А в консоле нет никаких ошибок?
Ответ написан
Комментировать
mlnkv
@mlnkv
JavaScript Developer
var snake = { 
  interval : {
    interval_id: null,
    right : function (stop){
      if (stop) {
        return clearInterval(this.interval_id);
      }
      if (this.interval_id) {
        clearInterval(this.interval_id);
      }
      this.interval_id = setInterval(snake.functions.moveRight, 500);
    }
  }
}
snake.interval.right();
snake.interval.right(true);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы