2013-10-15 20 views
0

我已經搜索並看到大多數有此問題的人傳遞函數調用而不是函數名稱,例如:setInterval(myFunc(),100)而不是setInterval(myFunc, 100)JS setInterval()僅在動畫不透明時運行一次

但我不是,它仍然不會工作...我也看到很多人說你需要parseFloat上不透明才能使它工作,我試過了,它仍然得到同樣的結果...

功能runSubMenu1()似乎無論運行只是一個時間我是否包括如果(i.style.opacity == 1)條款或不

不知道該從哪裏出發?建議?

<script type="text/javascript"> 

var run; 
var runOpt; 

function openSubMenu1(item) { 
    runOpt=item; 
    run = setInterval(runSubMenu1,100); 

} 

function runSubMenu1() { 
    var i=document.getElementById('menu-1-'+runOpt); 

    if(i.style.opacity==1){clearInterval(run);} 
    else{i.style.opacity+=.1;} 


} 


</script> 

編輯:取得由jfriend00提到的變化,和不透明度具有與頁面發送原始CSS 0集的數值,之後1次迭代的透明度似乎是0.1

+0

一個錯誤是'clearInterval(runSubMenu1)'應該是'clearInterval(run)'。另外,你真的應該把'var i'加到'runSubMenu1'上。另外,'i.style.opacity'最初可能沒有值,除非你明確地將它設置在DOM對象上,因爲'i.style'不返回默認值或樣式表值 - 只有在DOM對象上顯式設置的值。 – jfriend00

回答

0

您需要解析值,因爲它是一個字符串,否則+= .1失敗:

else { i.style.opacity = parseFloat(i.style.opacity) + .1; } 

你加入.1".1",這會導致:".1.1"。將這個值賦給opacity會調用一個數字解析器,因爲它是一個數字值,但是由於它不是一個有效的數字,所以失敗了,所以它會回落到.1。間隔無限循環,但由於它只從0移動到.1,它看起來只運行一次。

這裏是一個jsFiddle來顯示結果。

+0

我以前試過parseFloat(),但沒有在JS中設置不透明度。在我根據jfriend00的評論編輯了我的問題後,我重新讀了他寫的並意識到他意味着在CSS中將不透明度設置爲0是不夠的。 –

+0

所以現在,在JS中設置初始不透明度並使用parseFloat()我得到正確的結果,謝謝你們。 –