2011-12-28 4 views
0

Я написал эту функцию, чтобы летать DIV сверху справа внизу слева:JavaScript: функция повтора не работает

var myObj; 

function infly() { 
    myObj=document.getElementById('mydiv'); 
    myObj.style.right='0px'; 
    myObj.style.top='0px'; 
} 

function flyer() { 
    var x=parseInt(myObj.style.right); 
    var y=parseInt(myObj.style.top); 

    x+=1; 
    y+=1; 

    myObj.style.right=x+'px'; 
    myObj.style.top=y+'px'; 

} 

function repeat() 
{ 
setTimeout(flyer,5000) 
} 

И HTML код является:

<body onLoad="infly()"> 

<div id="mydiv"> 
</div> 

<a href="" onClick="javascript:repeat()">Fly</a> 

... 
.. 
. 

Но repeat функция не работает. Когда я удаляю эту функцию каждый раз, мой DIV летает правильно.

Я стараюсь использовать setInterval('fly();', 10);, но не удался.

Спасибо за помощь.


Update:

отредактировать код и правильно repeat функции, но до сих пор не работает.

ответ

3

использование

setTimeout(fly,5000) 

вместо

setTimeout("fly()","5000()") 
+0

я редактировать код, но не работает – Nulled

2

Второй параметр SetTimeout должен быть номер:

setTimeout(fly,5000) 

https://developer.mozilla.org/en/DOM/window.setTimeout

Обновленный, Бетта г не использовать «мушки()»:

код в альтернативном синтаксисе, является строка кода, который вы хотите выполнить после задержки миллисекунд. (Используя этот синтаксис не рекомендуется для тем же причинам, как с помощью Eval())

+0

функции также должны просто читать «летать»! –

+0

@WillemMulder Это еще одна оптимизация. Этот ответ дает ответ на вопрос и включает ссылку на соответствующую документацию. Итак, +1. –

+3

Никогда, никогда, никогда не передавайте строку в setTimeout/setInterval или контекст должен быть EVALuated. это определенно плохая практика. – fcalderan

0

Изменить вашу функцию повтора, чтобы посмотреть, как этот

function repeat() { setTimeout("fly()",5000) } 
0

И если вы хотите, чтобы функция постоянно двигаться без повторения клик вам нужно будет вызвать repeat(); в конце летать() также. (Из того, что вы хотите достичь)

-2
<a href="javascript:void()" onclick="javascript:repeat()">Fly</a> 
setTimeout("fly()",5000) 
1

Вот код, который делает div fly. Я создал его так, чтобы вы его видели. Ваш код только называется flyer один раз, и, не устанавливая позицию в абсолют, div не будет отображаться повторно.

<script type="text/javascript"> 
    var K_CYCLES = 20; 
    var numcycles = 0; 

    function infly() { 
    myObj = document.getElementById('mydiv'); 
    myObj.style.right = '0px'; 
    myObj.style.top = '0px'; 

    } 

    function flyer() { 

    var x = parseInt(myObj.style.right); 
    var y = parseInt(myObj.style.top); 

    x += 10; 
    y += 10; 

    myObj.style.right = x + 'px'; 
    myObj.style.top = y + 'px'; 
    myObj.style.position = 'absolute'; 

    numcycles++; 

    if (numcycles <= K_CYCLES) 
    { 
     setTimeout("flyer()",1000); 
    } 
    } 

    function repeat() 
    { 
    flyer(); 
    } 
</script> 
</head> 
<body onLoad="infly()"> 

<div id="mydiv" style="width:50px; height: 50px; border: 1px solid red;"> 
</div> 

<input type="button" onClick="repeat()" value="fly"/> 
</body> 
+0

Хорошая работа. Но незначительная проблема. Внутри повторяющейся функции 'numcycles' должно быть установлено значение 0, чтобы цикл повторялся. – tamilsweet

Смежные вопросы