2013-04-17 135 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语句后被修改,在完全不同的函数范围内。