Войти

Показать полную графическую версию : Изменение ширины блока (Java Script)


benya
17-11-2006, 17:18
Господа, подскажите почему не работает вот такая конструкция?

<script language="JavaScript" type="text/javascript">
<!--
diva = document.getElementById('div');
for (var y=0; y<500; y++) {
setTimeout("diva.style.width = "+y+"",500);
}
//-->
</script>
<div id="div" style="border:#000000 1px solid; width:0px;">&nbsp;</div>

vadimiron
17-11-2006, 19:39
А если: setTimeout("diva.style.width = diva.style.width+y",500); ?

Sham
17-11-2006, 21:33
imho если !DOCTYPE стоит, размерность везде надо ставить... т.е. diva.style.width = '"+y+"px'"... (это не так важно :))
в таком виде не будет работать, т.к. код выполяется, когда еще не загружен div (ошибка будет), надо в виде функции на onload делать...

benya
29-11-2006, 15:52
Sham,
Совершенно верно.

Кстати, господа, а кто знает как дождаться завершения рекурсивной функции (см. код ниже)?

<body onload="ma()">
<script language="JavaScript" type="text/javascript">
<!--
var y = 0;

function ma() {
my();
alert('yes!');
}


function my() {
y += 1;
document.getElementById('div').style.width = y+"%";
if (y < 50) setTimeout("my("+y+")", 5);
}
//-->
</script>
<div id="div" style="border:#000000 1px solid; width:0px;">&nbsp;</div>
</body>


После изменения размера блока должно появится диалоговое окно alert, оно появляется параллельно тоесть одновременно, а нужно что бы после...

Sham
29-11-2006, 21:18
benyaalert('yes!');а чем не устраивает setTimeout("alert('yes!')", 1000);?

benya
30-11-2006, 12:51
Sham,
Тем что функция будет в цикле и каждый раз количество "оборотов" будет разным в конструкции:
if (y < 50) setTimeout("my("+y+")", 5);
Поэтому будет либо большая пауза, либо выполняться скрипт будет парралельно.
Нужно либо подсчитать время, либо дождаться завершения рекурсивной функции.

Sham
01-12-2006, 02:15
benya тогда вместо if (y < 50) setTimeout("my("+y+")", 5); такой вариант (y < 50)? setTimeout("my("+y+")", 5):setTimeout("alert('yes!')", 5); и первый alert убрать всвязи с этим...

benya
01-12-2006, 15:03
Ясно. Только я поставил слегка другое условие:
if (y == 50) alert('yes!');
Результат почти один.




© OSzone.net 2001-2012