2013-04-17 132 views
0

Ehllo!當條件滿足時,我的功能不會返回(退出)。我的功能沒有返回

var arrowReady = false; 
var arrowImage = new Image(); 
var deg = 0; 
arrowImage.onload = function() { 
    arrowReady = true; 
    function moveArrow() { 
     setInterval(function() { 
      ctx1.save(); 
      deg++; 
      ctx1.rotate(deg * Math.PI/180); 
      // Here is^the amount of degrees it turns. 
      ctx1.clearRect(300, 200, 52, 310); 
      ctx1.drawImage(arrowImage, 300, 100, 42, 300); 
      ctx1.restore(); 
     }, 100); 

     if (deg == 40) return; 

    } 
} 

從我的理解,當deg = 40時,函數應該停止。但是,事實並非如此。有什麼建議麼?

+0

當'deg == 40'時,你想停止setInterval函數嗎? – Musa

+0

是的,這是計劃。我明白了,@Alex Mcp的答案奏效了。 – Bryce

回答

2

整蠱的javascript怎麼回事。 moveArrow僅在文檔加載時調用一次。返回或不返回不會停止運行。

您需要參考保存到區間:

var interval = setInterval(... 

然後從內部匿名setInterval功能,當deg ==40你會想clearInterval(interval)停止運行它。

試試這個:

var arrowReady = false; 
var arrowImage = new Image(); 
var deg = 0; 
arrowImage.onload = function() { 
    arrowReady = true; 
    function moveArrow() { 
     var interval = setInterval(function() { 
      if (deg == 40) { 
       clearInterval(interval); 
       return; 
      } 
      ctx1.save(); 
      deg++; 
      ctx1.rotate(deg * Math.PI/180); 
      // Here is^the amount of degrees it turns. 
      ctx1.clearRect(300, 200, 52, 310); 
      ctx1.drawImage(arrowImage, 300, 100, 42, 300); 
      ctx1.restore(); 
     }, 100); 

    } 
} 
+1

在這種情況下關閉魔法會起作用嗎?這需要'interval'作爲參考被捕獲,因爲我相信它在'setInterval'返回之前沒有被初始化。 – TNW

0

我不是一個JavaScript程序員,但並不需要指定的值返回

if (deg == 40) return deg;

+0

不,這裏沒有必要。 – Bryce

0

目前還不清楚是什麼最後的條件甚至應該做的。之後沒有任何東西,所以函數將會在那裏停止執行。爲什麼deg == 40如果這是函數調用結束的地方?

更重要的一點是,我敢肯定,事實上這個問題實際上並不是改變的值爲deg。所以deg將永遠不會等於該行上的40。你正在做的是排隊另一個函數在稍後運行(100毫秒?)。在該功能排隊後,控制立即轉到if語句(在其他函數運行之前)。

因此deg在執行if語句後被修改,在完全不同的函數範圍內。