Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   Изменение ширины блока (Java Script) (http://forum.oszone.net/showthread.php?t=74774)

benya 17-11-2006 17:18 513364

Изменение ширины блока (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;">&nbsp;</div>


vadimiron 17-11-2006 19:39 513449

А если: setTimeout("diva.style.width = diva.style.width+y",500); ?

Sham 17-11-2006 21:33 513498

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

benya 29-11-2006 15:52 518488

Sham,
Совершенно верно.

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

<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 518644

benya
Цитата:

alert('yes!');
а чем не устраивает setTimeout("alert('yes!')", 1000);?

benya 30-11-2006 12:51 518905

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

Sham 01-12-2006 02:15 519165

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 519434

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


Время: 11:31.

Время: 11:31.
© OSzone.net 2001-