Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   too much recursion (https://javascript.ru/forum/misc/61589-too-much-recursion.html)

Nesquik 24.02.2016 22:47

too much recursion
 
function phone_anim() {
		$('.phone').animate({
			opacity: 0.3
		}, 600).animate({
			opacity: 1
		}, 600);
		
		phone_anim();
	}
	
	phone_anim();


:) я думал прокатит(

рони 24.02.2016 23:15

Nesquik,
строка 8 должна быть в строке 6

Nesquik 24.02.2016 23:29

рони, боюсь спросить это как?

рони 24.02.2016 23:32

Nesquik,
(function phone_anim() {
		$('.phone').animate({
			opacity: 0.3
		}, 600).animate({
			opacity: 1
		}, 600, phone_anim);
	}())

Nesquik 24.02.2016 23:38

Вопрос еще любопытный. В моем предыдущем опыте использования асинхронных функций таймаута и интервала приводило к тому что условно мигание постепенно убыстрялось. Ведь, как я понимаю, это связано с механизмом работы данных функций в js ? и, если к примеру таймаут = 0 реальное срабатывание = 200 мс.

рони 24.02.2016 23:46

Nesquik,
это связано только с тем что вы увеличивали количество запущенных функций, устройство таймаута или интервала тут не причём, только в случае интервала создать лавину функций проще и беспощаднее.

Nesquik 24.02.2016 23:56

рони, т.е. я правильно понимаю что через рекурсию подобные задачки решать лучше?

рони 25.02.2016 00:05

Цитата:

Сообщение от Nesquik
рекурсию подобные задачки решать лучше?

лучше не умножать количество процессов, неважно за счёт чего это достигается, правильным запуском таймера или Callback

Nesquik 25.02.2016 00:08

да, но как тогда решить такие задачи?

рони 25.02.2016 00:29

Цитата:

Сообщение от Nesquik
да, но как тогда решить такие задачи?

запускать следующий цикл, только когда отработал предыдущий, либо отключать работу предыдущего цикла при запуске нового.
первый вариант пост 4
второй ниже
(function phone_anim() {
		$('.phone').stop(true,true).animate({
			opacity: 0.3
		}, 600).animate({
			opacity: 1
		}, 600 );
     window.setTimeout(phone_anim, 1200)
	}())

даже если 1200 будет меньше 600 + 600 , stop прервёт предыдущие анимации и наложения анимаций не произойдёт.


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