为什么画布停止清除矩形?

Dan*_*vic 5 html javascript canvas

我尝试为画布中的简单对象设置动画,并在开始时起作用,但过了一段时间,它会停止清除矩形并继续填充新的矩形。至少我认为它停止清除也许是另一回事。谁能帮我?没有控制台错误。

var canvas = document.querySelector('canvas');

canvas.width = window.innerWidth;
canvas.height = window.innerHeight;

var c = canvas.getContext('2d');

var x=100;
function animate() {
    requestAnimationFrame(animate);
    c.clearRect(0,0,window.innerHeight,window.innerWidth);
    c.beginPath();
    c.fillRect(x,100,100,100);
    x+=2;
}
animate();
Run Code Online (Sandbox Code Playgroud)
body{
    margin: 0;
}
canvas{
    background: orange;
}
Run Code Online (Sandbox Code Playgroud)
<canvas></canvas>
Run Code Online (Sandbox Code Playgroud)

ggo*_*len 3

正如 @Al.G 在评论中指出的,您的heightwidth参数在调用中是相反的clearRect()。交换它们c.clearRect(0, 0, window.innerWidth, window.innerHeight);将解决问题。

我通常会使用canvas.widthcanvas.height来清除非画布属性,例如window.innerWidthwindow.innerHeight,因为canvas属性将始终与其尺寸相匹配,减少对外部/全局变量的依赖,并且不需要除此之外的思考。

var canvas = document.querySelector('canvas');

canvas.width = window.innerWidth;
canvas.height = window.innerHeight;

var c = canvas.getContext('2d');
var x = 100;

function animate() {
    requestAnimationFrame(animate);
    c.clearRect(0, 0, canvas.width, canvas.height);
    c.beginPath();
    c.fillRect(x, 100, 100, 100);
    x += 2;
}

animate();
Run Code Online (Sandbox Code Playgroud)
body {
    margin: 0;
}
canvas {
    background: orange;
}
Run Code Online (Sandbox Code Playgroud)
<canvas></canvas>
Run Code Online (Sandbox Code Playgroud)