Вот простой код. Arc точно работает, но когда я пытаюсь поместить requestAnimationFrame в функцию, вся функция просто не работает.
Я ничего не делал, потому что я делаю это из курса холста Chris Courses. Точно такой же код, как и у него.
var canvas = document.querySelector('canvas');
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
var ctx = canvas.getContext('2d');
var x = 200;
function animate(){
requestAnimationFrame(animate);
ctx.beginPath();
ctx.arc(x, 200, 30, 0, Math.PI * 2, false);
ctx.strokeStyle = 'blue';
ctx.stroke();
console.info('F');
x =+ 1;
}
<html>
<head>
<meta charset = "utf-8"/>
<style>
*{
padding:0;
margin:0;
}
body{
overflow: hidden;
}
</style>
</head>
<body>
<canvas>
</canvas>
<script src = "canvas.js"></script>
</body>
</html>
Вам нужно вызвать функцию animate
хотя бы один раз вне функции, чтобы инициализировать ее начало. Это может быть другая requestAnimationFrame(animate)
, animate()
или самовызывающаяся функция.
function animate(){
// The function body
requestAnimationFrame(animate);
}
animate();
Я думаю, это не имеет большого значения stackoverflow.com/questions/38229386/…
«Вы также должны вызывать requestAnimationFrame в конце функции, а не в начале». Почему? Совершенно правильно называть это в начале, может быть даже лучше в очень редких случаях, когда это имеет значение (длинный кадр)