Рекурсивный 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 |
вам по сути клир не нужен, просто перестаньте его запускать.
<div></div> <script> var i = 0; s = 100; (run =()=> { document.querySelector('div').textContent = i++; if(i<s) setTimeout(run, 100); })(); </script> вот пример, функция перестанет запускаться когда i перестанет быть меньше S |
современные браузеры поддерживают el.remove()
для более старых el.parentNode.removeChild(el); |
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); } |
спасибо, получилось. (run =()=> {
bulletT34.style.left = coordT34Left + "px"; coordT34Left = coordT34Left + 10; if(coordT34Left < coordTigerLeft) setTimeout(run, 100); else bulletT34.remove(); но, как сделать, чтобы при повторном нажатии функция запускалась заново? То есть чтобы вылетал второй снаряд. Я думал, что если первый снаряд удалится, то после нажатия на кнопку вылетит второй. А сейчас хоть снаряд и исчезает, но второй снаряд не вылетает, вообще ничего не происходит. |
а, кажется понял, это мои переменные виноваты, счас разберусь
|
всё, разобрался, большое спасибо
|
Часовой пояс GMT +3, время: 10:24. |