Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.11.2015, 13:15
Интересующийся
Отправить личное сообщение для batcave Посмотреть профиль Найти все сообщения от batcave
 
Регистрация: 19.10.2015
Сообщений: 14

Не останавливается 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};
}
Ответить с цитированием
  #2 (permalink)  
Старый 20.11.2015, 13:19
Профессор
Отправить личное сообщение для Mess4me Посмотреть профиль Найти все сообщения от Mess4me
 
Регистрация: 03.11.2014
Сообщений: 263

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};
    }
Ответить с цитированием
  #3 (permalink)  
Старый 20.11.2015, 13:24
Интересующийся
Отправить личное сообщение для batcave Посмотреть профиль Найти все сообщения от batcave
 
Регистрация: 19.10.2015
Сообщений: 14

Сообщение от Mess4me
а так?
Не останавливается.
Ответить с цитированием
  #4 (permalink)  
Старый 20.11.2015, 13:33
Профессор
Отправить личное сообщение для Mess4me Посмотреть профиль Найти все сообщения от Mess4me
 
Регистрация: 03.11.2014
Сообщений: 263

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){
Ответить с цитированием
  #5 (permalink)  
Старый 20.11.2015, 13:36
Интересующийся
Отправить личное сообщение для batcave Посмотреть профиль Найти все сообщения от batcave
 
Регистрация: 19.10.2015
Сообщений: 14

Ааа спасибо большое! Я кажется понял. Сейчас перепишу. Остановка по превышению, да.
Ответить с цитированием
  #6 (permalink)  
Старый 20.11.2015, 13:38
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

batcave,
зачем условие там где оно никогда не сработает?
Ответить с цитированием
  #7 (permalink)  
Старый 20.11.2015, 13:38
Профессор
Отправить личное сообщение для Mess4me Посмотреть профиль Найти все сообщения от Mess4me
 
Регистрация: 03.11.2014
Сообщений: 263

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};
    }
Ответить с цитированием
  #8 (permalink)  
Старый 20.11.2015, 13:40
Интересующийся
Отправить личное сообщение для batcave Посмотреть профиль Найти все сообщения от batcave
 
Регистрация: 19.10.2015
Сообщений: 14

Я ваш должник, спасибо огромное)
Ответить с цитированием
  #9 (permalink)  
Старый 20.11.2015, 13:41
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

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};
		}
Ответить с цитированием
  #10 (permalink)  
Старый 20.11.2015, 13:46
Профессор
Отправить личное сообщение для Mess4me Посмотреть профиль Найти все сообщения от Mess4me
 
Регистрация: 03.11.2014
Сообщений: 263

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оптимизация JS WeMeSder Общие вопросы Javascript 0 13.06.2014 23:51
Не останавливается работа setInterval saves7 Общие вопросы Javascript 8 30.04.2014 18:04
setInterval и глобальные переменные Почемучкин Events/DOM/Window 11 11.08.2012 14:44
setTimeout setInterval и др. mycoding Общие вопросы Javascript 6 28.10.2010 17:26
Проблема в document.write при использовании setInterval() GOll Общие вопросы Javascript 21 06.10.2008 17:38