Я думаю, что такое поведение вы пытаетесь достичь. Я реорганизовал его, чтобы вам нужно было создать только один объект Image
(и изменил имена переменных на английский, чтобы мне было проще следовать коду) Надеюсь, понятно, как работает код. Не стесняйтесь спрашивать в комментариях, если у вас есть какие-либо вопросы по этому поводу. Свойство body onload необходимо изменить на "setupBackground();"
вместо "draw();"
для работы с этим кодом.
function setupBackground() {
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
function draw() {
canvas.width = 0;
canvas.height = 0;
var divHeight = div.scrollHeight;
var divWidth = div.scrollWidth;
var yScale = divHeight / img.height;
var xScale = divWidth / img.width;
var newImgHeight = img.height * xScale;
var newImgWidth = divWidth;
if (divHeight >= newImgHeight) {
newImgHeight = divHeight;
newImgWidth = img.width * yScale;
}
canvas.width = divWidth;
canvas.height = divHeight;
ctx.drawImage(img,0,0,newImgWidth,newImgHeight);
}
var img = new Image();
img.onload = function() {
window.onresize = draw;
draw();
}
img.src = 'ad.jpg';
};