Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Рекурсивный SetTimeout (https://javascript.ru/forum/misc/73263-rekursivnyjj-settimeout.html)

Самовар 02.04.2018 13:18

Рекурсивный SetTimeout
 
Вот код
function bulletMove(source){
 
    var t = setTimeout(function run() {
      
      bulletT34.style.left = coordT34Left + "px";
      coordT34Left = coordT34Left + 10;
      if(coordT34Left >= coordTigerLeft){
         bulletT34.remove();
        clearTimeout(t);
         }
      
  setTimeout(run, 100);
}, 100);
    
}


почему clearTimeout(t); не заканчивает рекурсиный SetTimeout?
И второй вопрос. насколько подходит данная функция для удаления элемента со страницы? bulletT34.remove();

вот полный код если нужен https://codepen.io/Sergeev2/pen/qxLXzB

j0hnik 02.04.2018 13:27

вам по сути клир не нужен, просто перестаньте его запускать.

<div></div>
<script>
var i = 0; s = 100;
(run =()=> {
document.querySelector('div').textContent = i++;
if(i<s) setTimeout(run, 100);
})();
</script>


вот пример, функция перестанет запускаться когда i перестанет быть меньше S

j0hnik 02.04.2018 13:38

современные браузеры поддерживают el.remove()
для более старых el.parentNode.removeChild(el);

j0hnik 02.04.2018 13:43

function bulletMove(source){

		var t = setTimeout(function run() {

			bulletT34.style.left = coordT34Left + "px";
			coordT34Left +=  10;
			if(coordT34Left >= coordTigerLeft){
				bulletT34.remove();
			}
			else setTimeout(run, 100);
		}, 100);

	}

Самовар 02.04.2018 13:44

спасибо, получилось. (run =()=> {


bulletT34.style.left = coordT34Left + "px";
coordT34Left = coordT34Left + 10;
if(coordT34Left < coordTigerLeft) setTimeout(run, 100); else bulletT34.remove();


но, как сделать, чтобы при повторном нажатии функция запускалась заново? То есть чтобы вылетал второй снаряд. Я думал, что если первый снаряд удалится, то после нажатия на кнопку вылетит второй. А сейчас хоть снаряд и исчезает, но второй снаряд не вылетает, вообще ничего не происходит.

Самовар 02.04.2018 13:50

а, кажется понял, это мои переменные виноваты, счас разберусь

Самовар 02.04.2018 14:00

всё, разобрался, большое спасибо


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