使用 setTimeout() 循环,使矩形变大,直到它到达画布边缘,然后重置
Using setTimeout() to loop, making a rectangle bigger until it hits the canvas edge and then resetting
我在使用 javascript setTimeout() 函数时遇到了一些问题。基本上,我想增加矩形的大小,直到它达到画布的最大高度或宽度,然后将其宽度和高度重置为 0 并保持循环。
可能我遇到的主要问题是在 if else 语句中,else 似乎从未以某种方式被调用,这对我来说毫无意义。我尝试将 else 更改为 if 表示高度/宽度是否等于或高于画布高度/宽度以将高度/宽度设置为 0,但这也不起作用。
这是我的代码:
<!DOCTYPE HTML>
<html>
<head>
<title>A Canvas</title>
<style>
canvas{border:20px solid black;}
</style>
<script>
function drawMe()
{
var canvas2=document.getElementById("canvas1");
var ctx = canvas2.getContext("2d");
width = 0;
height = 0;
draw(ctx, width, height);
}
function draw(ctx, width, height)
{
ctx.beginPath();
ctx.fillStyle="#839402";
ctx.fillRect(0,0,width,height);
if (width < 900 && height < 500)
{
width += 9;
height += 5;
}
else
{
width = 0;
height = 0;
}
setTimeout(function() {draw(ctx, width, height)}, 20);
}
</script>
</head>
<body onload="drawMe();">
<canvas id="canvas1" width="900" height="500">
<!-- Stuff goes here -->
</canvas>
</body>
</html>
额外信息:
矩形正在正常增长,在矩形碰到画布边缘之前,一切看起来都很好。此时,矩形只是停止增长,不会发生任何其他情况。它应该将矩形的高度和宽度重置为 0,并在无限循环中重新开始整个过程,但由于某种原因没有。
您必须记住,每次drawMe调用之间都不会清除画布 - 因此,虽然宽度和高度已正确调整,但在第一次循环之后,整个区域被绘制过来,因此看起来什么都没有发生。
添加简单的透明填充可以解决此问题。
小提琴here
! http://jsfiddle.net/YAJnk/
相关文章:
- 让文本输入幻灯片显示输入时的新文本输入?然后向后滑动
- Javascript运行php文件,然后下载文件
- 如何将屏幕分辨率乘以 80%,然后在代码中使用
- 弹出窗口出现,然后退出
- 如何在JQuery函数中定义一个值,然后调用另一个函数并使用该值
- 将值输入到对象,然后该对象推送到数组
- 如何临时暂停浏览器渲染,然后恢复整个页面
- JS:检查URL中的参数,然后迭代一个参数为var的函数
- 下拉菜单在菜单按钮的边缘闪闪发光
- 滚动然后捕捉到顶部而不是取消捕捉
- AngularJS加载JSON数据,然后从中解析/加载HTML
- 有没有一个抽象层,这样我就可以集成一次,然后使用pusher、pubnub或faye
- Canvas+svg路径动画,在路径中的特定点暂停一段时间,然后继续
- 如何在图片和边缘之间居中设置标签
- 如果30秒未单击,请应用CSS一次,将其删除,然后重新迭代
- 点击相同的按钮打开模型,然后提交表单
- ThreeJS将画布中的文本渲染为纹理,然后应用于平面
- 将display属性更改为visible flicks,然后再次消失
- 在一个简单的jquery幻灯片中,我的类到达图像的末尾,然后从DOM的边缘掉下来
- 使用 setTimeout() 循环,使矩形变大,直到它到达画布边缘,然后重置