Javascript 我的功能不是';t返回
哦!当条件满足时,我的函数不会返回(退出)Javascript 我的功能不是';t返回,javascript,canvas,return,Javascript,Canvas,Return,哦!当条件满足时,我的函数不会返回(退出) var arrowReady = false; var arrowImage = new Image(); var deg = 0; arrowImage.onload = function () { arrowReady = true; function moveArrow() { setInterval(function() { ctx1.save(); deg++;
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程序员,但您不需要指定要返回的值吗
示例
if(deg==40)返回deg代码>这里出现了棘手的javascript<代码>移动箭头
仅在文档加载时调用一次。返回或不返回都不会阻止您的间歇跑
您需要保存对间隔的引用:
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);
}
}
现在还不清楚最后一个条件应该做什么。之后没有任何内容,因此函数将在那里停止执行。如果无论发生什么情况,函数调用都在这里结束,那么如果
deg==40
又有什么关系呢
更重要的是,我确信,这个函数实际上并没有改变deg
的值。因此,deg
在该行永远不会等于40
。您正在做的是排队等待另一个函数在稍后时间(100毫秒?)运行。该函数排队后,控件立即转到if
语句(在其他函数运行之前)
因此,在执行
if
语句后,将在一个完全不同的函数范围内修改deg
。当deg==40
时,是否要在setInterval中停止函数?是的,这是计划。我明白了,@Alex Mcp的回答起作用了。在这种情况下,关闭魔法会起作用吗?这将需要捕获interval
作为引用,因为我相信在setInterval
返回之前它不会初始化。不,这里不需要。