【发布时间】:2012-03-04 12:40:16
【问题描述】:
我做了一个循环函数来慢慢淡化图像。
var ctx; // this is the canvas already defined
function nextPic(i)
{
trans = 1; //resets transparent var to 1
fadeloop('out'); //starts loop
ctx.clearRect(0, 0, canvas.width, canvas.height); //clears canvas, this doesn't work
alert("done"); //this doesn't work either
}
function fadeloop(f){ //loop that fades
if(f == 'out'){ //make sure it wants to shade out
setTimeout(function () { //timed delay for fading out
fadeImgOut(); //calls function to fade out by .01
if(trans>0.0){ //if faded out break out of loop
fadeloop('out'); //if not restart function
}
},10);
}
}
function fadeImgOut(){ //function that fades out
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.drawImage(img,0,0);
ctx.globalAlpha = trans;
trans = trans - .01;
}
一个按钮调用nextpic。它会慢慢透明图像,然后淡入另一个。现在它淡出图像直到 trans = .01。不会继续到警报(“完成”)或画布重置。任何想法,我一遍又一遍地查看,但不知道该怎么做。
【问题讨论】:
-
您在网络检查器中遇到错误吗?如果警报(“完成”)没有触发,我猜脚本会因任何原因而崩溃。
-
canvas.width & canvas.height在哪里定义?
-
另外,你现在在哪里声明 'trans'对于 ctx。
-
没有
var关键字。因此,如果他没有在某个地方明确声明它,那么它就是一个全球性的——在这里不应该是个问题。我想知道的是,如果 OP 没有意识到他对fadeloop的初始调用会立即返回,而不是由于setTimeout而在所有递归结束时返回。 -
我没有收到任何错误,也没有崩溃。它只是完全忽略它。画布在顶部附近定义。忘记包含该变量,但它可以工作。声明了一些变量,但未在此处声明,因为我不知道将其粘贴在示例代码中的哪个位置。 Canvas、ctx、trans 都被声明了。
标签: javascript html function loops timeout