Vous pouvez également fournir une fonction qui remplace simplement la balise img par le div/background afin que vous bénéficiez à la fois de l'attribut onload et de la flexibilité du div. Bien sûr, vous pouvez affiner le code pour répondre au mieux à vos besoins, mais dans mon cas, je m'assure également que la largeur ou la hauteur est préservée pour un meilleur contrôle de ce que j'attends.
Mon code comme suit:
<img src="imageToLoad.jpg" onload="imageLoadedTurnItAsDivBackground($(this), true, '')">
<style>
.img-to-div {
background-size: contain;
}
</style>
<script>
// Background Image Loaded
function imageLoadedTurnItAsDivBackground(tag, preserveHeight, appendHtml) {
// Make sure parameters are all ok
if (!tag || !tag.length) return;
const w = tag.width();
const h = tag.height();
if (!w || !h) return;
// Preserve height or width in addition to the image ratio
if (preserveHeight) {
const r = h/w;
tag.css('width', w * r);
}
else {
const r = w/h;
tag.css('height', h * r);
}
const src = tag.attr('src');
// Make the img disappear (one could animate stuff)
tag.css('display', 'none');
// Add the div, potentially adding extra HTML inside the div
tag.after(`
<div class="img-to-div" style="background-image: url(${src}); width: ${w}px; height:${h}px">${appendHtml}</div>
`);
// Finally remove the original img, turned useless now
tag.remove();
}
</script>
Pour une raison bizarre le onload ne se déclenche que lorsque le ImageLocation prend effectivement un peu de temps à charger, comme à partir du Web. Cela ne fonctionne pas dans les tests locaux avec 0 temps de chargement. – thedp
vous pouvez définir un délai d'attente pour 'bgImg.src = imageLocation;', mais je suppose que la plupart des gens ne seront pas sur votre ordinateur,: P –
Cela a en fait un bug lorsque 'bgImg.src' contient des caractères spéciaux comme guillemets simples et doubles et antislashs. Au lieu de cela, vous devriez faire "url (" '+ bgImg.src.replace ("\\", "\\\\"). Replace (' "',' \\" ') +' ") ';' . Je pense que cela devrait échapper à toute url correctement. –