У меня есть следующий файл JavaScript с функцией menu
, которая вызывает функцию draw
4 раза для отображения 4 разных изображений на экране.
Мне нужно отобразить их в том порядке, в котором они закодированы, но каждый раз, когда я обновляюсь, я получаю что-то другое. Я понимаю, что это наиболее вероятно, потому что некоторые изображения загружаются быстрее, чем другие.
Я посмотрел некоторые другие примеры этого на сайте, и решение, по-видимому, заключается в рисовании изображений только тогда, когда все они загружены первыми, однако я не могу заставить это работать.
Есть ли другой способ?
var cvs = document.getElementById("canvas");
var ctx = cvs.getContext("2d");
var audio = new Audio('sounds/sound.ogg');
cvs.addEventListener("click", function(){
audio.play();
});
var logoSound;
ctx.fillStyle= "#87ceeb";
ctx.fillRect(0,0,1330,800);
function draw(src, a, b) {
var ctx = document.getElementById('canvas').getContext('2d');
var img = new Image();
img.onload = function() {
ctx.drawImage(img, x, y);
};
img.src = src;
}
function menu() {
draw("images/clouds.png", 0, 300);
draw("images/background.png", 0, 360);
draw("images/display.png", 410, 0);
draw("images/plank.png", 405, 300);
}
menu();
Обновление
async function draw(src,x,y) {
var ctx = document.getElementById('canvas').getContext('2d');
var img = new Image();
img.onload = function(){
ctx.drawImage(img,x,y);
};
img.src = src;
}
// main
(async function menu (){
await draw("images/clouds.png", 0, 300);
await draw("images/background.png", 0, 360);
await draw("images/display.png", 410, 0);
await draw("images/plank.png", 405, 300);
await draw("images/info.png", 1195, 660);
}());
function cloud2(){
ctx.drawImage(cloud, speed, 0);
cvs.requestAnimationFrame(cloud);
}
menu();