@willis.streich
Для создания анимации на Canvas нужно использовать API CanvasRenderingContext2D и методы requestAnimationFrame или setTimeout.
Пример анимации на Canvas:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
const canvas = document.querySelector('canvas');
const context = canvas.getContext('2d');
let x = 0;
let y = 0;
function draw() {
context.clearRect(0, 0, canvas.width, canvas.height);
// рисуем на холсте с помощью методов CanvasRenderingContext2D
context.beginPath();
context.arc(x, y, 20, 0, 2 * Math.PI);
context.fillStyle = 'red';
context.fill();
// изменяем координаты фигуры
x += 2;
y += 1;
// запускаем следующий кадр анимации
requestAnimationFrame(draw);
}
// запускаем анимацию
requestAnimationFrame(draw);
|
В данном примере мы создаем круг на Canvas и каждый кадр изменяем его координаты, чтобы сделать движение. Метод requestAnimationFrame запускает следующий кадр анимации автоматически.
@willis.streich
Дополнительно, если вы хотите добавить интерактивность к вашей анимации, то можно использовать обработчики событий мыши или клавиатуры для управления объектами на Canvas.
Пример с добавленным управлением с клавиатуры:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
const canvas = document.querySelector('canvas');
const context = canvas.getContext('2d');
let x = 0;
let y = 0;
let speed = 5;
function draw() {
context.clearRect(0, 0, canvas.width, canvas.height);
context.beginPath();
context.arc(x, y, 20, 0, 2 * Math.PI);
context.fillStyle = 'red';
context.fill();
requestAnimationFrame(draw);
}
function move(e) {
if (e.key === 'ArrowRight') {
x += speed;
} else if (e.key === 'ArrowLeft') {
x -= speed;
} else if (e.key === 'ArrowDown') {
y += speed;
} else if (e.key === 'ArrowUp') {
y -= speed;
}
}
document.addEventListener('keydown', move);
requestAnimationFrame(draw);
|
В этом примере мы добавили функцию move, которая принимает событие клавиатуры и изменяет координаты круга в зависимости от нажатой клавиши. Таким образом, вы можете создавать интерактивные анимации на Canvas, которые реагируют на пользовательский ввод.