2012-08-14 57 views
0

我有一個javascript函數,當你將鼠標懸停在圖像上時,它會將該圖像的ID更改爲具有關鍵幀動畫的圖像,以便它飛行10秒鐘然後返回到它開始的位置。此時,您應該可以再次鼠標滑過,並以同樣的方式飛行。直到setTimeout()完成後才忽略新的輸入

我的問題是我怎樣才能讓它忽略任何更多的鼠標懸停而飛來飛去?我有這樣的事情現在:

<script> 
    function fly(element){ 
    element.id="flynow"; 
    setTimeout(function(){stopflying(element)}, 10000); 
    } 

    function stopflying(element){ 
    element.id=""; 
    } 
</script> 
+0

如何觸發鼠標懸停? – Jon 2012-08-14 16:37:19

+0

onmouseover =「fly(this);」 – Sam 2012-08-14 16:54:09

回答

1

我寫我自己的測試功能,對於這一點,雖然我沒有使用相同的輸出方法,你的的onmouseover事件應該是相同的。

我所做的只是創建一個全局變量來存儲一個布爾值。這表明你是否在飛行中。我假設你一次只想要1個元素,對吧?

我的代碼:

var isFlying = false; 
function fly(element){ 
    if(!flying){ 
     flying=true; 
     element.id="flynow"; 
     setTimeout(function(){stopflying(element)} , 10000); 
    } 
} 

function stopflying(){ 
    flying=false; 
    element.id=""; 
} 

這應該只允許1種元素在同一時間飛,無論多少次的onmouseover會被稱爲。

+0

我確實想要有很多元素同時飛行,每個元素都有自己的10秒定時器。我會嘗試這段代碼,看看我能做些什麼。 – Sam 2012-08-14 22:31:34

+0

嘿,我得到它的工作感謝您的想法,我所做的只是改變線,「if(!flying){」to「if(element.id!=」flynow「){」。然後我刪除了全局變量,因爲它不再需要。 現在它完美的工作,謝謝! – Sam 2012-08-14 23:22:57

0

如果您還沒有調整超時毫秒,它似乎會忽略超時。

例如:

setTimeout("smoothscroll" , 1000) 
setTimeout("smoothscroll" , 1000) 
setTimeout("smoothscroll" , 1000) 
setTimeout("smoothscroll" , 1000) 
setTimeout("smoothscroll" , 1000) 

將不火的五大功能間隔1秒,但所有這些一次,並在1秒內他們都將同時響應,表現爲如果超時已被忽略。

setTimeout("smoothscroll" , 1000) 
setTimeout("smoothscroll" , 2000) 
setTimeout("smoothscroll" , 3000) 
setTimeout("smoothscroll" , 4000) 
setTimeout("smoothscroll" , 5000) 

會立即解僱他們,但他們會相隔一秒鐘,這是期望的結果。

此現象是在循環中創建還是作爲單個命令無關緊要。

希望這會有所幫助。

Nico