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

HTML+CSS+JavaScript

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

 

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

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

тема: Рекурсивная функция выполняется один раз, а должна не один раз.
 
 автор: SilentChild   (25.02.2012 в 15:52)   письмо автору
 
 

Здравствуйте, участники форума!

Есть функция, рекурсивная:


function f_Drop(obj)
{                 
    if (parseFloat(obj.style.top) <= 25) {       
        obj.style.top = (parseFloat(obj.style.top) + 1) + "px";            
        setTimeout("f_Drop(obj)", 400);         
    }
}


Результат работы данной функции - изменение свойства top на один пиксель. Условие в функции, при этом, всё ещё выполняется, но функция перестаёт работать.

Связано ли это с setTimeout() или с чем-то ещё?

  Ответить  
 
 автор: AlexSol   (25.02.2012 в 16:18)   письмо автору
 
   для: SilentChild   (25.02.2012 в 15:52)
 

setTimeout("f_Drop("+obj+")", 400);

  Ответить  
 
 автор: SilentChild   (25.02.2012 в 16:23)   письмо автору
 
   для: AlexSol   (25.02.2012 в 16:18)
 

К сожалению, проблема не в этом. Не помогло.

  Ответить  
 
 автор: task   (25.02.2012 в 16:36)   письмо автору
 
   для: SilentChild   (25.02.2012 в 16:23)
 

Ищите проблему в данных, в остальном проблем нет, исключая только передачу параметра в таймере, нужно все-таки выделять:
function loop(n) {                  
  window.status = n;        
  n++;             
  setTimeout("loop("+n+")", 400);          
}
loop(0);

  Ответить  
 
 автор: SilentChild   (25.02.2012 в 16:45)   письмо автору
 
   для: task   (25.02.2012 в 16:36)
 

Вот как получаю данные и использую их в функции:


function f_Int(f)
{                 
    var u = document.getElementsByTagName('li')[0].getElementsByTagName('ul')[0];  
    var s = window.getComputedStyle(u, "");
    var top = s.getPropertyValue("top");
    u.style.top = top; 
    if (f) {
        f_Drop(u);
    }     
}       

  Ответить  
 
 автор: ЯСА   (25.02.2012 в 21:11)   письмо автору
 
   для: SilentChild   (25.02.2012 в 15:52)
 

Зачем МНОГОКРАТНО передавать функции один и тот же неизменяемый аргумент?
ДО первого вызова функции f_Drop () определите глобальную переменную OBJ

Пример:
<html>
<head>
<script>
var OBJ;
function f_Drop ()
{                 
var Z = OBJ.style.top.split ('px') [0] * 1;
    if (Z <= 1000) {       
        OBJ.style.top = (Z + 10) + "px";            
        setTimeout ('f_Drop ()', 400);         
    }
}
</script>

</head>
<body onload="OBJ = document.getElementById ('DV'); f_Drop ()">
<div style="width: 100px; height: 100px; background: yellow; position: absolute; left: 100px; top: 100px" id="DV"></div>
</body>
</html>

  Ответить  
 
 автор: SilentChild   (25.02.2012 в 22:16)   письмо автору
 
   для: ЯСА   (25.02.2012 в 21:11)
 

Ух ты, функция "завелась" с пол оборота. Благодарю! Очень помогли. =) Дело, видимо, действительно в том, что "двадцать" раз аргумент передаётся функции.

  Ответить  
 
 автор: ЯСА   (25.02.2012 в 23:16)   письмо автору
 
   для: SilentChild   (25.02.2012 в 22:16)
 

Нет, дело совершенно не в том - сколько раз вызывается функция (и сколько раз ей передаётся аргумент).

Дело совсем в ином.
В том, чего вам понять, видимо, НЕ ДАНО.

Я совсем недавно вам пытался это объяснить - http://www.softtime.ru/forum/read.php?id_forum=4&id_theme=85168 - но вы не въехали.

Полагаю, что ВООБЩЕ что-либо вам объяснять - гиблое дело.

Перефразируя Стругацких - "трудно быть богомбестолковым" (с)

  Ответить  
 
 автор: SilentChild   (25.02.2012 в 23:30)   письмо автору
 
   для: ЯСА   (25.02.2012 в 23:16)
 

Да-да, я помню. Значит буду разбираться и вникать сново в то, что Вы написали, пока не станет ДАНО. =) Очень помогли, спасибо Вам огромное! И да... согласен: очень трудно. =))

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

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