VS Code
<html>
<body>
<div id="canvasContainer">
<canvas id="canvas" width="900" height="520"></canvas>
</div>
<script src="image.js"></script>
</body>
</html>
//------------------------------
const gcCanvas = document.getElementById('canvas');
gcCanvas.width = 600;
gcCanvas.height = 300;
const gcContext = gcCanvas.getContext('2d');
const gcBackgroundImage = new Image();
const gcBackgroundWidth = gcCanvas.width;
let glBackgroundHeight;
const gcCarImage = new Image();
const gcCarImageWidth = 40;
const gcCarImageHeight = 100;
let glCarTopLeftX;
let glCarTopLeftY;
let glDegrees = 0;
let glArrowFlag = false;
//------------------------------
//++++++++++++++++++++++++++++++
//------------------------------
document.addEventListener('DOMContentLoaded', (ev) =>
{
gcBackgroundImage.onload = function ()
{
gcCarImage.onload = function ()
{
const cAspectRatio = gcBackgroundImage.naturalWidth / gcBackgroundImage.naturalHeight;
glBackgroundHeight = gcCanvas.height = gcBackgroundWidth / cAspectRatio;
gcContext.drawImage(gcBackgroundImage, 0, 0, gcBackgroundWidth, glBackgroundHeight);
glCarTopLeftX = gcBackgroundWidth / 2 - gcCarImageWidth / 2;
glCarTopLeftY = glBackgroundHeight / 2 - gcCarImageHeight / 2;
gcContext.drawImage(gcCarImage, glCarTopLeftX, glCarTopLeftY, gcCarImageWidth, gcCarImageHeight);
}
gcCarImage.src = "Car.jpg";
}
gcBackgroundImage.src = "Streets.jpg";
}
)//document.addEventListener('DOMContentLoaded'
//------------------------------
//------------------------------
document.body.addEventListener("keydown", e =>
{
let lRenderFlag = false;
e.preventDefault();
switch(e.key) {
case 's':
glDegrees = 0;
for (let ii = 0; ii < 360; ii++) {
glDegrees = ii;
let lCarCenterX = glCarTopLeftX + gcCarImageWidth / 2;
let lCarCenterY = glCarTopLeftY + gcCarImageHeight / 2;
fRender(lCarCenterX, lCarCenterY, glDegrees);
fSleep(1000);
}
break;
}
}
)//document.body.addEventListener("keydown"
//------------------------------
//------------------------------
function fSleep(num)
{
let now = new Date();
let stop = now.getTime() + num;
while(true) {
now = new Date();
if(now.getTime() > stop) return;
}
}//fSleep
//------------------------------
//------------------------------
function fRender(lCarCenterX, lCarCenterY, glDegrees)
{
gcContext.clearRect(0, 0, gcCanvas.width, gcCanvas.height);
gcContext.drawImage(gcBackgroundImage, 0, 0, gcBackgroundWidth, glBackgroundHeight);
let lRadians = Math.PI / 180 * glDegrees;
gcContext.translate(lCarCenterX, lCarCenterY);
gcContext.rotate(lRadians);
gcContext.drawImage(gcCarImage, -gcCarImageWidth / 2, -gcCarImageHeight / 2, gcCarImageWidth, gcCarImageHeight);
gcContext.rotate(-lRadians);
gcContext.translate(-lCarCenterX, -lCarCenterY);
}//fRender
//------------------------------
This code is to have a car rotate on a background image. Entering “s” should start the rotation sequence.
To slow the rotation, a fSleep" function has been added (delays 1 sec):
When running code, the car image never changes. Putting a Breakpoint on the fSleep function does display the car rotating with every F5.
–
The car and background images — Car.jpg => https://snipboard.io/ptkWjJ.jpg — Streets.jpg => https://snipboard.io/4YgDaf.jpg.
The images combined — https://snipboard.io/C8LZXu.jpg