Вот способ, которым вы можете вставлять изображения как фоновые изображения или как <img />
элементы в divs
, на который вы ссылаетесь:
<div id="card0" style="width: 100px; height: 100px;"></div>
<div id="card1" style="width: 100px; height: 100px;"></div>
let loadedImage = [];
function preloadImages(urls, allImagesLoadedCallback) {
let loadedCounter = 0;
let toBeLoadedNumber = urls.length;
urls.forEach(function(url) {
preloadImage(url, function() {
loadedCounter++;
console.log(`Number of loaded images: ${loadedCounter}`);
if (loadedCounter == toBeLoadedNumber) {
allImagesLoadedCallback();
}
});
});
function preloadImage(url, anImageLoadedCallback) {
img = new Image();
img.src = url;
img.onload = anImageLoadedCallback;
loadedImage.push(img);
}
}
function gameBoardCards() {
for (let i = 0; i < loadedImage.length; i++) {
document.getElementById(`card${i}`).style.backgroundImage = `url('${loadedImage[i].src}')`;
// document.getElementById(`card${i}`).appendChild(loadedImage[i]);
}
}
preloadImages([
`https://upload.wikimedia.org/wikipedia/commons/thumb/7/7d/Color_icon_green.svg/2000px-Color_icon_green.svg.png`, `https://upload.wikimedia.org/wikipedia/commons/thumb/f/ff/Solid_blue.svg/225px-Solid_blue.svg.png`
], function() {
console.log(`all images were loaded`);
gameBoardCards();
// continue your code
});
Это может выглядеть какнемного за то, что вы пытаетесь достичь, но я добавил туда корректный обработчик загрузки изображений.Функция preloadImages
будет обрабатывать загрузку изображений, таким образом, они должным образом предварительно загружены, и может отображаться в DOM.Часто мы пытаемся использовать изображения до их правильной загрузки, в результате чего они иногда не отображаются, несмотря на отсутствие ошибок.
Остальная часть кода является прямой, в цикле for
он проходит по существующему divs
, и вы можете использовать текущую активную строку document.getElementById(`card${i}`).style.backgroundImage = `url('${loadedImage[i].src}')`;
, чтобы использовать loadedImage[i]
изображение src
, чтобы загрузить его в качестве фонового изображения divs
.Или вы можете использовать закомментированную строку непосредственно под этим document.getElementById(`card${i}`).appendChild(loadedImage[i]);
, чтобы вставить элемент <img />
в этот div.Просто используйте любой из них, который вам подходит.
Вы можете увидеть код в действии в этой демонстрации JS Fiddle .
Надеюсь, это поможет:)