También puede proporcionar una función que simplemente reemplaza la etiqueta img por div/background para que se beneficie tanto del atributo onload como de la flexibilidad del div.
Por supuesto, puede ajustar el código que mejor se adapte a sus necesidades, pero en mi caso, también me aseguro de que se conserva el ancho o la altura para un mejor control de lo que espero.
Mi código de la siguiente manera:
<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>
Por alguna extraña razón el proceso de carga sólo se activa cuando el imageLocation realmente necesita algún tiempo para cargar, al igual que desde la web. No funciona en pruebas locales con 0 tiempo de carga. – thedp
puede establecer un tiempo de espera para 'bgImg.src = imageLocation;', pero supongo que la mayoría de las personas no estarán en su computadora,: P –
Esto realmente tiene un error cuando 'bgImg.src' contiene caracteres especiales como comillas simples y dobles y barras diagonales inversas. En su lugar, debe convertirlo en "url (" '+ bgImg.src.replace ("\\", "\\\\"). Replace (' "',' \\" ') +' ") ';' . Creo que debería escapar de cualquier url correctamente. –