Javascript.RU

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

Рекурсивный 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
Ответить с цитированием
  #2 (permalink)  
Старый 02.04.2018, 13:27
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

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

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


вот пример, функция перестанет запускаться когда i перестанет быть меньше S
Ответить с цитированием
  #3 (permalink)  
Старый 02.04.2018, 13:38
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

современные браузеры поддерживают el.remove()
для более старых el.parentNode.removeChild(el);
Ответить с цитированием
  #4 (permalink)  
Старый 02.04.2018, 13:43
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

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);

	}
Ответить с цитированием
  #5 (permalink)  
Старый 02.04.2018, 13:44
Аспирант
Отправить личное сообщение для Самовар Посмотреть профиль Найти все сообщения от Самовар
 
Регистрация: 28.03.2017
Сообщений: 31

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


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


но, как сделать, чтобы при повторном нажатии функция запускалась заново? То есть чтобы вылетал второй снаряд. Я думал, что если первый снаряд удалится, то после нажатия на кнопку вылетит второй. А сейчас хоть снаряд и исчезает, но второй снаряд не вылетает, вообще ничего не происходит.
Ответить с цитированием
  #6 (permalink)  
Старый 02.04.2018, 13:50
Аспирант
Отправить личное сообщение для Самовар Посмотреть профиль Найти все сообщения от Самовар
 
Регистрация: 28.03.2017
Сообщений: 31

а, кажется понял, это мои переменные виноваты, счас разберусь
Ответить с цитированием
  #7 (permalink)  
Старый 02.04.2018, 14:00
Аспирант
Отправить личное сообщение для Самовар Посмотреть профиль Найти все сообщения от Самовар
 
Регистрация: 28.03.2017
Сообщений: 31

всё, разобрался, большое спасибо
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите разобраться с setTimeout arkadii_parovozov Общие вопросы Javascript 9 01.06.2017 12:47
SetTimeOut анимация javascript thystruby Общие вопросы Javascript 1 15.09.2016 10:43
Мерзкий ишак и рекурсивный setTimeout gavnomaster Internet Explorer 5 09.03.2011 11:16
Передача контекста через setTimeout decadent jQuery 3 10.02.2011 19:01
setTimeout в браузере IE и Opera leha66 Javascript под браузер 2 13.12.2010 13:02