Как отметил @ Al.G в комментарии, ваши параметры height
и width
инвертируются в вызове clearRect()
.Замена их c.clearRect(0, 0, window.innerWidth, window.innerHeight);
решит проблему.
Я обычно очищаю с помощью canvas.width
и canvas.height
, а не свойств без холста, таких как window.innerWidth
и window.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();
body {
margin: 0;
}
canvas {
background: orange;
}
<canvas></canvas>