2014-10-03 166 views
2

我已經寫了下面這個函數,它應該每20ms運行一次,直到一個顏色淡入淡出完成,但淡入淡出發生了 - 爲什麼?Javascript:setTimeout間隔似乎被忽略?

function saveColour() 
    { 
     if(x<=speedms/frameratems) 
     { 
      currentRed=Math.floor((x*deltaRed)+oldRGB[0]); 
      currentGreen=Math.floor((x*deltaGreen)+oldRGB[1]); 
      currentBlue=Math.floor((x*deltaBlue)+oldRGB[2]); 
      document.getElementById(id).style.backgroundColor="rgb("+currentRed+", "+currentGreen+", "+currentBlue+")"; 
      //window.alert("rgb("+currentRed+", "+currentGreen+", "+currentBlue+")"); 
      x++; 
      setTimeout(saveColour(),frameratems); 
     } 
    } 

setTimeout似乎立即運行,無論我設置frameratems和我不知道爲什麼。

謝謝!

+8

應的setTimeout(saveColour,frameratems); setTimeout期望對函數的引用。 saveColour()是調用,saveColour是引用。你需要參考。 – 2014-10-03 09:34:08

+1

您使用錯誤的語法:'setTimeout(saveColour(),frameratems);'。它應該是:'setTimeout(saveColour,frameratems);' – hindmost 2014-10-03 09:34:18

+0

令人驚歎的,這是馬上工作。謝謝你們! – 2014-10-03 09:36:49

回答

4

的setTimeout與setTimeout(saveColour(),frameratems);

調用它要傳遞它saveColour

的返回值,這將是確定的,如果saveColour返回的功能需要一個函數引用作爲第一個參數

使用

setTimeout(saveColour,frameratems); 

代替