Показать полную графическую версию : Изменение ширины блока (Java Script)
Господа, подскажите почему не работает вот такая конструкция?
<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;"> </div>
vadimiron
17-11-2006, 19:39
А если: setTimeout("diva.style.width = diva.style.width+y",500); ?
imho если !DOCTYPE стоит, размерность везде надо ставить... т.е. diva.style.width = '"+y+"px'"... (это не так важно :))
в таком виде не будет работать, т.к. код выполяется, когда еще не загружен div (ошибка будет), надо в виде функции на onload делать...
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;"> </div>
</body>
После изменения размера блока должно появится диалоговое окно alert, оно появляется параллельно тоесть одновременно, а нужно что бы после...
benyaalert('yes!');а чем не устраивает setTimeout("alert('yes!')", 1000);?
Sham,
Тем что функция будет в цикле и каждый раз количество "оборотов" будет разным в конструкции:
if (y < 50) setTimeout("my("+y+")", 5);
Поэтому будет либо большая пауза, либо выполняться скрипт будет парралельно.
Нужно либо подсчитать время, либо дождаться завершения рекурсивной функции.
benya тогда вместо if (y < 50) setTimeout("my("+y+")", 5); такой вариант (y < 50)? setTimeout("my("+y+")", 5):setTimeout("alert('yes!')", 5); и первый alert убрать всвязи с этим...
Ясно. Только я поставил слегка другое условие:
if (y == 50) alert('yes!');
Результат почти один.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.