Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   setTimeout (https://javascript.ru/forum/misc/1342-settimeout.html)

Воитель 24.06.2008 15:48

setTimeout
 
<script language="JavaScript"> 
<!-- 
  var gjapox=0;
  var gjapoy=0;
  function japapilon(japox, japoy) {
          japox=japox-50;
          japoy=japoy-50;
        var tekst=japox+" "+japoy;
        var koorslx=japox+"px";
        var koorsly=japoy+"px";
        gjapox=japox;
        gjapoy=japoy;
        polet();
        }
        function polet() {
        gjapoy+=10
        japoy=gjapoy;
        japox=gjapox;
        var tekstt=japox+" "+japoy+"/"+tekst;
        document.getElementById('bibon').value = tekstt;
        if (navigator.appName == "Netscape") 
{ document.move.left = japox
  document.move.top = japoy } 
else { document.all.move.style.left= japox
       document.all.move.style.top = japoy  }
       window.setTimeout("polet()", 20);
}
--> 
</script>


Тут в function japapilon(japox, japoy) переменные приходят из флэшки. И функция запускается походу по приходу переменных.
Народ помогите. Никак не запускается polet() повторно через setTimeout
Я пробовал и через функции передавать параметрами.
И весь инет облазил. Вроде всё подробно написано, но я не понимаю
И в Dronov.HTML.JavaScript читал про функции и переменные.

Код
<html>
<head>
<title>Преремещающиеся слова.</title>
<script language="JavaScript">
<!--

var rad = 50; 
var xoff = 350; 
var yoff = 180; 
var pi = Math.PI; 
var inc = pi / 36; 
var pos=0;
function move() {
pos += inc; 
obj1.left = xoff+4;
obj1.top = (rad* Math.sin(pos)) + yoff;
obj3.left = xoff;
obj3.top = yoff;
setTimeout("move()", 1);
} 
-->
</script>
</head>
<body>
<div id="obj1" style="z-index:5;position:absolute;width:70px; height:31px"><font face="Arial" size="3" color="#993333"><b>Script</b></font></div>
<div id="obj3" style="z-index:7;position:absolute;width:89px; height:18px;clip:rect(0px 89px 18px 0px);  layer-background-color:#99bb99;"><font face="Arial" size="3"  color="#FF8000"><b><center>Java</center></b></font></div>
<script language="JavaScript">
<!-- 
var NN = (navigator.appName == "Netscape" && parseInt(navigator.appVersion) >= 4);
var obj1 = (NN) ? document.obj1 : document.all.obj1.style;
var obj3 = (NN) ? document.obj3 : document.all.obj3.style;
move();
-->
</script>
<form name="form1" method="post" action="">
  <textarea name="bibon" id="bibon"></textarea>
</form>
</body>
</html>


-это рабочий код, тоже с применением setTimeout.

vasa_c 24.06.2008 20:42

У вас polet локальная функция внутри контекста japapilon.
К моменту срабатывания таймера её уже нет, тем более в качестве глобальной polet(), которую этот таймер ищет.
Воспользуйтесь:
setTimeout(arguments.callee, 20);
arguments.callee - указание внутри функции на саму себя

Гость 24.06.2008 22:05

Ух ты!!!
Интересный вариант, очень грамотный. спасибо.
Но я вроде добился нужного, более топорным способом.

Воитель 25.06.2008 09:47

arguments.callee
Будет работать во всех браузерах?

Gvozd 25.06.2008 10:43

да,должно

asdffdsa 23.01.2009 10:36

милый пример!


Часовой пояс GMT +3, время: 10:05.