我想使用javascript创建一个内循环的周期性过程。每个循环由更改圆圈表示 - 它们之间具有指定的时间间隔和循环之间的指定时间间隔。问题也越来越难,因为我还需要一个循环和圆之间的可变时间间隔(我将使用随机数函数)。
目前我有以下代码,但无效:
<html>
<body>
<canvas id="canv" widht="800" height="500"></canvas>
<script>
var ctx=document.getElementById("canv").getContext('2d');
var cnt=0;
var int0=self.setInterval(function(){startDraw()},5000);
function startDraw ()
{
var int1=self.setInterval(function(){DrawC()},1000);
cnt++;
if (cnt==3)
{
int0=window.clearInterval(int0);
}
}
function DrawC()
{
ctx.beginPath();
ctx.arc(200, 200, 50, 0, 2*Math.PI, true);
ctx.fillStyle="yellow";
ctx.fill();
ctx.closePath();
var int2=self.setInterval(function(){DrawGC()},1000);
int1=window.clearInterval(int1);
}
function DrawGC()
{
ctx.beginPath();
ctx.arc(200, 200, 50, 0, 2*Math.PI, true);
ctx.fillStyle="green";
ctx.fill();
ctx.closePath();
var int3=self.setInterval(function(){DrawWC()},1000);
int2=window.clearInterval(int2);
}
function DrawWC()
{
ctx.beginPath();
ctx.arc(200, 200, 52, 0, 2*Math.PI, true);
ctx.fillStyle="white";
ctx.fill();
ctx.closePath();
int3=window.clearInterval(int3);
}
function getRandomInt(min, max)
{
return Math.floor(Math.random() * (max - min + 1)) + min;
}
</script>
</form>
</body>
</html>
答案 0 :(得分:0)
问题1使用此代码:
你正在使用int2(在DrawC中定义),就像它被定义为globaly一样,间隔不会被清除,因为int2在DrawGC中没有值。
尝试将它们定义为全局
var int1, int2, int3
;作为代码中的第一行
其次,如果你想在1个循环后取消它们,为什么要使用间隔,使用setTimeout()
而不是只调用一次方法
答案 1 :(得分:0)
您应该将计时器变量设为全局变量。尝试:
var int0, int1, int2, int3;
从函数中删除这些变量声明。
试试这段代码,这是你需要的吗?
<html>
<body>
<canvas id="canv" widht="800" height="500"></canvas>
<script>
var ctx=document.getElementById("canv").getContext('2d');
var cnt=0;
var int0, int1, int2, int3;
circleTime = 1000;
cycleTime = 5000;
int0 = self.setInterval(startDraw, cycleTime);
function startDraw ()
{
console.log("startDraw...");
// Start drawing circles
self.setTimeout(DrawC, circleTime);
cnt++;
if (cnt == 4)
{
// Stop startDraw
int0 = window.clearInterval(int0);
/*
// Let's draw again
cnt = 0;
cycleTime = getRandomInt(5000, 10000);
circleTime = getRandomInt(1000, 2000);
int0 = self.setInterval(startDraw, cycleTime);
*/
}
}
function DrawC()
{
console.log("Circle...");
ctx.beginPath();
ctx.arc(200, 200, 50, 0, 2*Math.PI, true);
ctx.fillStyle="yellow";
ctx.fill();
ctx.closePath();
self.setTimeout(DrawGC, circleTime);
}
function DrawGC()
{
console.log("greenCircle...");
ctx.beginPath();
ctx.arc(200, 200, 50, 0, 2*Math.PI, true);
ctx.fillStyle="green";
ctx.fill();
ctx.closePath();
self.setTimeout(DrawWC, circleTime);
}
function DrawWC()
{
console.log("whiteCircle...");
ctx.beginPath();
ctx.arc(200, 200, 52, 0, 2*Math.PI, true);
ctx.fillStyle="white";
ctx.fill();
ctx.closePath();
}
function getRandomInt(min, max)
{
return Math.floor(Math.random() * (max - min + 1)) + min;
}
</script>
</form>
</body>
</html>