Pregunta

Tengo la siguiente clase CSS

.bg {
   background-image: url('bg.jpg');
   display: none;
}

que estoy aplicando en una etiqueta TD.

Mi pregunta es ¿cómo puedo saber con JavaScript / jQuery que la imagen de fondo terminado de cargar?

Gracias.

ACTUALIZACIÓN: se ha añadido propiedad de presentación. Ya que mi objetivo principal es alternar entre la vista.

¿Fue útil?

Solución

La única forma que conozco de hacer esto es para cargar la imagen usando Javascript y, a continuación, establecer esa imagen como el fondo de color.

Por ejemplo:

var bgImg = new Image();
bgImg.onload = function(){
   myDiv.style.backgroundImage = 'url(' + bgImg.src + ')';
};
bgImg.src = imageLocation;

Otros consejos

Dar la clase a un div con visibility:hidden en la carga de la página inicial. De esa manera, ya estará en la memoria caché del navegador cuando se asigna la clase a su celda de la tabla.

@Jamie Dixon - que no dijo lo que quería hacer nada con la imagen de fondo, sólo sé cuando está cargada ...

$(function( )
{
    var a = new Image;
    a.onload = function( ){ /* do whatever */ };
    a.src = $( 'body' ).css( 'background-image' );
});

Este artículo puede ayudarle a . Sección pertinente:

// Once the document is loaded, check to see if the
// image has loaded.
$(
    function(){
        var jImg = $( "img:first" );

        // Alert the image "complete" flag using the
        // attr() method as well as the DOM property.
        alert(
            "attr(): " +
            jImg.attr( "complete" ) + "\n\n" +

            ".complete: " +
            jImg[ 0 ].complete + "\n\n" +

            "getAttribute(): " +
            jImg[ 0 ].getAttribute( "complete" )
        );
    }
);

Básicamente seleccionar la imagen de fondo y hacer la comprobación para ver que se carga.

También puede proporcionar una función que simplemente reemplaza la etiqueta img por el div / de fondo para que usted se beneficia de tanto el atributo onload y la flexibilidad de la div.

Por supuesto, se puede ajustar con precisión el código para mejor se adapte a sus necesidades, pero en mi caso, yo también asegurarse de que la anchura o la altura se conserva para un mejor control de lo que cabe esperar.

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>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top