2011-12-28 248 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);但沒有成功。

感謝您的幫助。


更新:

我編輯的代碼與正確的repeat功能,但還是不行。

回答

3

使用

setTimeout(fly,5000) 

代替

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

我編輯的代碼,但不能工作 – Nulled 2011-12-28 09:41:33

2

的setTimeout的第二個參數應爲數字:

setTimeout(fly,5000) 

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

更新,貝特r不使用「fly()」:

替代語法中的代碼是在延遲毫秒後要執行的代碼字符串 。 (使用此語法不建議 同樣的原因爲使用eval())

+0

功能也應該只是閱讀「飛」! – 2011-12-28 09:12:14

+0

@WillemMulder這是另一種優化。這個答案爲這個問題提供了一個答案,並且包含了相關文檔的鏈接。所以+1。 – 2011-12-28 09:13:06

+3

千萬不要永遠不要將字符串傳遞給setTimeout/setInterval或者需要對上下文進行EVALuated。這絕對是一種不好的做法 – fcalderan 2011-12-28 09:15:14

0

改變你的復讀功能,看起來像這樣

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

如果你想要的功能,不斷不重複移動點擊你需要調用repeat();在fly()結束時也是如此。 (如果是的話,你想完成什麼...)

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

這裏是代碼,使分區飛。我設計了它,所以你可以看到它。你的代碼只能調用傳單一次,沒有將位置設置爲絕對的,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 2011-12-29 03:23:18

0
<a href="javascript:void()" onclick="javascript:repeat()">Fly</a>