Я написал код для моей задачи по подбору персонала - она должна быть перепутана слева направо.Когда он попадает в правую границу, он должен изменить свой размер на 100px, левый - 50px.После каждых 20 пикселей он меняет свой цвет.Как я могу гарантировать, что это изменение будет происходить один раз в 20pxls?Код на самом деле работает правильно, но я не могу найти в Интернете никакого решения, которое помогло бы мне повторить эту конкретную анимацию кода.Он движется слева направо, а затем снова налево, и Река прячется, как бесконечный левый.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width>, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>CANVAS animacje</title>
<style>
body{
margin: 0;
padding: 0;
display: flex;
align-items: center;
justify-content: center;
height: 100vh;
}
</style>
</head>
<body>
<canvas></canvas>
<script>
const canvas = document.querySelector('canvas');
const ctx = canvas.getContext('2d');
canvas.width = 1000;
canvas.height = 500;
let cw = canvas.width;
let ch = canvas.height;
let canvasX = 0;
let canvasY = 0;
let rectX = 0;
let rectY = ch/2;
let rectSize = 50;
let rectSizeRight = 100;
let rectSpeed = 10;
function field(){
ctx.fillStyle = '#ddd';
ctx.fillRect(canvasX, canvasY, cw, ch);
window.requestAnimationFrame(field);
}
function randomColors(){
let r = Math.floor(Math.random()*255);
let g = Math.floor(Math.random()*255);
let b = Math.floor(Math.random()*255);
return 'rgb('+r+','+g+','+b+')';
window.requestAnimationFrame(randomColors);
}
function rect(){
ctx.fillStyle = randomColors()
ctx.fillRect(rectX,rectY,rectSize,rectSize);
rectX+=rectSpeed;
if(rectX+rectSize == 0){
rectSize = rectSize;
rectSpeed=rectSpeed;
} else if(rectX+rectSizeRight == cw){
rectSize=rectSizeRight;
rectSpeed = -rectSpeed;
} ;
window.requestAnimationFrame(rect);
// if(rectX+rectSizeRight == cw){
// rectSize=rectSizeRight;
// rectSpeed = -rectSpeed
// }
// if (rectX+rectSize <= 0){
// rectSize = rectSize;
// rectSpeed = -rectSpeed;
// }
// if(rectX+rectSizeRight>=cw){
// rectSize=rectSizeRight;
// rectSpeed = -rectSpeed;
// }
}
function animate(){
field();
rect();
randomColors();
}
window.requestAnimationFrame(animate);
</script>
</body>
</html>