Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Из-за цикла не работает анимация (https://javascript.ru/forum/misc/19455-iz-za-cikla-ne-rabotaet-animaciya.html)

Isaac 04.08.2011 20:05

Из-за цикла не работает анимация
 
Здравсвуйте
Есть код анимации
window.onload = function()
	{
		var distance = 1,
			speed = 0.5,
			li = document.getElementById("lists-r1").children,
			arrayCoords = [0, 26, 53, 78, 104, 130, 156, 182, 208, 234, 260],
			count = 1,
			i = 0,
			arrayCoordsMax = li.length;
			
		for(i; i <= arrayCoordsMax; i ++)
		{
			alert(li[i].offsetTop)
		}		

		function animate()
		{			
			distance = distance + speed;
			document.getElementById("playDiv-r1").style.top = distance + "px";
	
			if(distance == arrayCoords[count])
			{
				setTimeout(animate, 1500);	
				count ++;
			}else
			 	setTimeout(animate, 10);  	
				
			if(distance == 260)
				speed = 0;				
		};		
		animate();
	};
</script>

Сейчас анимация не работает, но если убрать цикл for, то все сразу заработает.
В чем проблема, подскажите ?

dmitriymar 04.08.2011 20:30

li = document.getElementById("lists-r1").children чего это такое?

li = document.getElementTagName(имя тега но не ид);
for(i; i <= arrayCoordsMax; i ++)
{
alert(li[i].offsetTop)
}
или потомков элемента нужно найти но в лбом развале это li = document.getElementById("lists-r1").children

Isaac 04.08.2011 20:30

Уже разобрался.

Isaac 04.08.2011 20:30

Цитата:

Сообщение от dmitriymar (Сообщение 117311)
li = document.getElementById("lists-r1").children чего это такое?

Это у меня в ul находятся li и хочу к ним добраться, что я и сделал.

Isaac 04.08.2011 20:43

Проблема возникла в другом, если я пишу ф-ю, как "немедленно вызываемую", то почему-то не работает анимация
window.onload = function()
	{
		var distance = 1,
			speed = 0.5,
			li = document.getElementById("lists-r1").children,
			count = 1,
			i = 0;

		(function()
		{			
			distance = distance + speed;
			document.getElementById("playDiv-r1").style.top = distance + "px";	
	
			if(distance == li[count].offsetTop)
			{
				setTimeout(animate, 1500);	
				count ++;
			}else
			 	setTimeout(animate, 10);  	
				
			if(distance == 260)
				speed = 0;				
		}());		
		
	};

Вроде ф-я написанна правильно

dmitriymar 04.08.2011 20:43

действительно,есть такое дело

dmitriymar 04.08.2011 20:48

Цитата:

Сообщение от Isaac
}());

)();

Isaac 04.08.2011 20:49

Цитата:

Сообщение от dmitriymar (Сообщение 117316)
действительно,есть такое дело

Странно, а может такое быть, что переменные за этой ф-ей могут быть не видны ?

Isaac 04.08.2011 20:50

Цитата:

Сообщение от dmitriymar (Сообщение 117317)
)();

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

dmitriymar 04.08.2011 21:00

нет не правильно. сначала закрывается скобка тело функции) ,затем её вызов().


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