Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   SetTimeout правильное использование (https://javascript.ru/forum/misc/29676-settimeout-pravilnoe-ispolzovanie.html)

nata031189 06.07.2012 23:11

SetTimeout правильное использование
 
var massHeight1 = [20.1,9.1,13.8,11.9,13.2,7.2];
				var massHeight2 = [34.5,19.2,26.8,17.1,16.2,16.8];
				paintColoumsTimeout = setTimeout( function DrawColoums() {
						lenghtY1 = massHeight1[i]*7.6;
						lenghtY2 = massHeight2[i]*7.6;
						s.fillStyle = 'red';
						s.strokeStyle = '#fff';
						s.fillRect(startX1+lenghtDeltaX, startY-alpha-lenghtY1, lenghtX, lenghtY1+alpha);
						s.fillStyle = 'black';
						s.strokeStyle = '#000';
						while(j < lenghtY2+alpha)
						{
							s.fillRect(startX2+lenghtDeltaX, startY-alpha-lenghtY2, lenghtX, j);
							j+=0.1;
						}
						j = 0;
						lenghtDeltaX += 102;
						if(i <  massHeight1.length)
						{
							paintColoumsTimeout = setTimeout(DrawColoums, 300);
							i++;
						}
					
				},100);

Данный кусок кода рисуеит столбцы с высотой, которая задана в массиве massHeight1, massHeight2. Но мне нужно чтобы рисовались столцбы с низу вверх плавно для этого я создала цикл while
while(j < lenghtY2+alpha)
						{
							s.fillRect(startX2+lenghtDeltaX, startY-alpha-lenghtY2, lenghtX, j);
							j+=0.1;
						}

но мне нужно,чтобы это все рисовалось с задержкой,тоесть надо это заключить в SetTimeout. Как это должно выглядеть?
Помогите, очень надо!
Заранее спасибо!

Dim@ 07.07.2012 10:06

nata031189,
создайте функцию
function stroika(){
 if (j < (lenghtY2 + alpha)){clearInterval(interval); return}
 s.fillRect(startX2+lenghtDeltaX, startY-alpha-lenghtY2, lenghtX, j);
 j+=0.1;
}
interval = setInterval('stroika()', 500);

интервал будет действовать до конца постройки (когда if станет false).

nerv_ 07.07.2012 10:54

Dim@, думал, что моя ава ужасна, но глядя на твои, понял, что это не так

Dim@ 07.07.2012 10:55

nerv_,
угу :D

nata031189 07.07.2012 11:18

А куда именно поставить эту функцию, поставила вместо while - пишет в консоли, что не известна функция stroika.
Можно полностью весь код с данной функцией? Спасибо

Dim@ 07.07.2012 11:32

nata031189,
он выводит в консоль что не известна функция stroika потому что сетИнтервал и сетТаймаут умеют вызывать функцию только из глобальной области видимости, попробуйте вынести эту функцию за рамки данной (в глобальную область)


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