[英]My function isn't returning
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时,函数应该停止。 但是,事实并非如此。 有什么建议么?
棘手的javascript在这里发生。 moveArrow
仅在文档加载时调用一次。 是否返回不会阻止你的间隔运行。
您需要保存对间隔的引用:
var interval = setInterval(...
然后从WITHIN匿名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);
}
}
我不是JavaScript程序员,但您不需要指定要返回的值
示例if (deg == 40) return deg;
目前尚不清楚最后一个条件甚至应该做什么。 之后什么也没有,所以无论如何,该功能将停止执行。 如果这是函数调用结束的地方,那么为什么如果deg == 40
则无关紧要?
更重要的是,我确信,这个函数实际上并没有改变 deg
的值。 所以deg
在那条线上永远不会等于40
。 你正在做的是排队另一个函数以便稍后运行(100毫秒?)。 在该函数排队后,控件立即转到if
语句(在其他函数运行之前)。
因此,在if
语句执行之后,在一个完全不同的函数范围内修改deg
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.