Hoạt ảnh trên Canvas (Canvas Animation)
Tạo hoạt ảnh trên HTML5 canvas mượt mà, độc lập với tốc độ khung hình (frame rate / FPS) sử dụng thời gian (delta time) và các hàm easing.
Vẽ đối tượng động trên Canvas
Để đối tượng di chuyển, tọa độ được cập nhật qua hàm update() và xóa nét vẽ cũ qua clearRect() ở hàm draw() trước khi vẽ vị trí mới:
function draw() {
// Xóa toàn bộ canvas
context.clearRect(0, 0, canvas.width, canvas.height);
context.fillStyle = '#ff8080';
context.fillRect(rectX, rectY, 150, 100);
}

Di chuyển dựa trên thời gian (Delta Time)
Để tốc độ di chuyển của đối tượng không bị phụ thuộc vào cấu hình phần cứng (FPS cao thì chạy quá nhanh, FPS thấp thì chạy chậm), ta tính toán khoảng thời gian đã trôi qua giữa các khung hình (Delta Time):
let secondsPassed = 0; // Delta time (giây)
let oldTimeStamp = 0;
let movingSpeed = 50; // 50 pixel mỗi giây
function gameLoop(timeStamp) {
// Tính toán thời gian đã trôi qua
secondsPassed = (timeStamp - oldTimeStamp) / 1000;
oldTimeStamp = timeStamp;
// Giới hạn thời gian nhảy tối đa để tránh lỗi giật lag khi chuyển tab
secondsPassed = Math.min(secondsPassed, 0.1);
update(secondsPassed);
draw();
window.requestAnimationFrame(gameLoop);
}
function update(secondsPassed) {
// Tính vị trí mới dựa trên thời gian
rectX += (movingSpeed * secondsPassed);
rectY += (movingSpeed * secondsPassed);
}