Не останавливается 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}; } |
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,
а останавливаться должен по клику или когда превышен linkOffsetLeft ? Вы условие немного не так задали . 1. Произошел клик Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
|
Ааа спасибо большое! Я кажется понял. Сейчас перепишу. Остановка по превышению, да.
|
batcave,
зачем условие там где оно никогда не сработает? |
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,
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}; } |
batcave,
игра старенький King's Bounty напоминает по графике ) |
Часовой пояс GMT +3, время: 23:57. |