Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Не останавливается setInterval (https://javascript.ru/forum/misc/59640-ne-ostanavlivaetsya-setinterval.html)

batcave 20.11.2015 13:15

Не останавливается setInterval
 
Всем привет. Нужно чтобы div остановил свое движение когда его offsetLeft превысит определенное число. Например 180px. Вроде делаю все правильно, а не останавливается. Вот ссылочка, чтобы было понятно к чему код:
http://billyandthecure.esy.es/sand.html
пытаюсь сделать спрайтовую анимацию через сетИнтервал.
Сам код:
var divLink = document.querySelector('.zelda');
var linkOffsetLeft = divLink.offsetLeft;
var movementRightArray = ['0% 70%', '35% 70%', '0% 70%', '100% 70%'];
var i = 0;
var timerId;
divLink.addEventListener('click', move);
		
function move(){
	if( linkOffsetLeft < 180){
 	      timerId = setInterval(moveRight, 300);
	} else { clearInterval(timerId)}
}
function moveRight(){
	 linkOffsetLeft += 5;
	divLink.style.left = linkOffsetLeft + 'px'; 
	divLink.style.backgroundPosition = ''+movementRightArray[i]+'';
	i++;
	if (i > 3) { i = 0};
}

Mess4me 20.11.2015 13:19

batcave,
а так?
var divLink = document.querySelector('.zelda');
    var linkOffsetLeft = divLink.offsetLeft;
    var movementRightArray = ['0% 70%', '35% 70%', '0% 70%', '100% 70%'];
    var i = 0;
    var timerId;
    divLink.addEventListener('click', move);

    function move(){
        if( linkOffsetLeft < 180){
            timerId = setInterval(function () {moveRight()}

            , 300);
        } else { clearInterval(timerId)}
    }
    function moveRight(){
        linkOffsetLeft += 5;
        divLink.style.left = linkOffsetLeft + 'px';
        divLink.style.backgroundPosition = ''+movementRightArray[i]+'';
        i++;
        if (i > 3) { i = 0};
    }

batcave 20.11.2015 13:24

Цитата:

Сообщение от Mess4me
а так?

Не останавливается.

Mess4me 20.11.2015 13:33

batcave,
а останавливаться должен по клику или когда превышен linkOffsetLeft ?
Вы условие немного не так задали .
1. Произошел клик
Цитата:

Сообщение от Mess4me
 divLink.addEventListener('click', move);

2. Запустилась функция
Цитата:

Сообщение от Mess4me
function move()

3. Проверила условие
Цитата:

Сообщение от Mess4me
if( linkOffsetLeft < 180){

4. Так как удовлетворяет запустила SetInterval , которая запускает функцию moveRight
Цитата:

Сообщение от Mess4me
timerId = setInterval(function () {moveRight()}

5. Больше к проверке не возвращается
Цитата:

Сообщение от Mess4me
if( linkOffsetLeft < 180){


batcave 20.11.2015 13:36

Ааа спасибо большое! Я кажется понял. Сейчас перепишу. Остановка по превышению, да.

рони 20.11.2015 13:38

batcave,
зачем условие там где оно никогда не сработает?

Mess4me 20.11.2015 13:38

batcave,
может так?
var divLink = document.querySelector('.zelda');
    var linkOffsetLeft = divLink.offsetLeft;
    var movementRightArray = ['0% 70%', '35% 70%', '0% 70%', '100% 70%'];
    var i = 0;
    var timerId;
    divLink.addEventListener('click', move);

    function move() {

            timerId = setInterval(function () {
                if (linkOffsetLeft < 180) {
                    moveRight()
                } else {

                    clearInterval(timerId)
                }
            }, 300);

        
    }
    function moveRight(){
        linkOffsetLeft += 5;
        divLink.style.left = linkOffsetLeft + 'px';
        divLink.style.backgroundPosition = ''+movementRightArray[i]+'';
        i++;
        if (i > 3) { i = 0};
    }

batcave 20.11.2015 13:40

Я ваш должник, спасибо огромное)

рони 20.11.2015 13:41

batcave,
var divLink = document.querySelector('.zelda');
		var linkOffsetLeft = divLink.offsetLeft;
		var movementRightArray = ['0% 70%', '35% 70%', '0% 70%', '100% 70%'];
		var i = 0;
		var timerId
		divLink.addEventListener('click', move);

		function move(){
                clearInterval(timerId);
			 	timerId = setInterval(moveRight, 300);

		 }
		function moveRight(){
		 	linkOffsetLeft += 5;
            if( linkOffsetLeft > 180){ clearInterval(timerId); return} ;
			divLink.style.left = linkOffsetLeft + 'px';
			divLink.style.backgroundPosition = ''+movementRightArray[i]+'';
			i++;
			if (i > 3) { i = 0};
		}

Mess4me 20.11.2015 13:46

batcave,
игра старенький King's Bounty напоминает по графике )


Часовой пояс GMT +3, время: 16:36.