Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проблемка с setTimeout
 
 автор: madv   (10.02.2009 в 19:07)   письмо автору
 
 

Задачка: нужно сделать, чтобы в цикле цифры одна за другой выводились с задержкой в таком виде: 0, 1, 2, 3...
(как будто печатаются, что ли...)

Мои мысли:

Код:

<html>
<body>
<script>
i=0;
pause=0;
while(i<10)
{
    
    setTimeout("document.body.innerHTML += i+'<br />';", pause);
    pause=pause+500;
    i++;
    
}
</script>
</body>
</html>

результат: 10, 10, 10...
цифры выводятся с задержкой, но почему-то все десятки, а должно быть 0, 1, 2, 3...

код (убрал задержку):
<html>
<body>
<script>
i=0;
pause=0;
while(i<10)
{
    
    document.body.innerHTML += i+'<br />';
    pause=pause+500;
    i++;
    
}
</script>
</body>
</html>

результат: 0, 1, 2, 3...

Цифры корректные, но задержки нет...

Вопрос: как все таки решить эту задачку? Кто подскажет?
Заранее спасибо.

  Ответить  
 
 автор: goodwilll   (11.02.2009 в 16:09)   письмо автору
 
   для: madv   (10.02.2009 в 19:07)
 

я борюсь с задержками при выполнении моих скриптов а вы наоборот ))))) сделайте цикл длинный и будет вам задержка )))))

  Ответить  
 
 автор: Dr Lines   (11.02.2009 в 16:26)   письмо автору
 
   для: goodwilll   (11.02.2009 в 16:09)
 

Объясняю, что происходит:

while() - запускает setTimeout (теперь setTimeout работает автономо, само посебе) следом сразу же выполняются арифметические действия над перемеными.
Всё это просиходит мнгновенно и не ждет setTimeout, как вы этого предполагали, поэтому i сразу равно 10.

Просто напросто setTimeout не успевает вывести i равное чемуто другому.

Вот так должно выглядеть ваше рабочее решение:

<html>
<body>
<script>
var i=0;
var timer;
function insert_10()
{
 document.body.innerHTML += i+'<br />';
 i++;
 if(i<10)
 {
  timer = setTimeout("insert_10();", 500);
 }
 else
 {
  clearTimeout(timer);
 }
}

insert_10();
</script>
</body>
</html>

  Ответить  
 
 автор: ddhvvn   (11.02.2009 в 16:51)   письмо автору
 
   для: Dr Lines   (11.02.2009 в 16:26)
 

Вам надо типа рекурсия )
что-то вроде этого

var tm;
function func1(i)
{
   i++;
  document.body.innerHTML += i+'<br />'; 
  if (i<10)
     tm = setTimeout('func1('+i+'), 500);
  else
    clearTimeout(tm);
}
i = 0;
func(0);

  Ответить  
 
 автор: PAT   (11.02.2009 в 19:30)   письмо автору
 
   для: madv   (10.02.2009 в 19:07)
 

<html>
<head>
<script>
var i = p = 0;
onload = function f () {document.body.innerHTML += i++ + '<br />'; p += 500; if (i < 10) setTimeout (f, p)} 
</script>
</head>
<body>
</body>
</html> 

  Ответить  
 
 автор: ddhvvn   (11.02.2009 в 19:52)   письмо автору
 
   для: PAT   (11.02.2009 в 19:30)
 

Да, так явно "покорректней" будет )

  Ответить  
 
 автор: madv   (13.02.2009 в 22:39)   письмо автору
 
   для: ddhvvn   (11.02.2009 в 19:52)
 

Большое спасибо всем, очень помогли!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования