2010-07-19 22 views
12

¿Hay alguna manera, mediante jQuery, de desencadenar un evento al cargar una imagen de fondo CSS?Evento desencadenante en la carga de imagen de fondo

+0

duplicado posible de [¿Cómo puedo comprobar si una la imagen de fondo está cargada?] (http://stackoverflow.com/questions/5057990/how-can-i-check-if-a-background-image-isloaded) – azerafati

Respuesta

22

que podría hacerlo de esta manera,

demo

$('<img>').load(function(){ 
    // make sure to bind the load event BEFORE setting the "src" 
    alert('image loaded'); 
}).attr('src',function(){ 
    var imgUrl = $('body').css('background-image'); 
    imgUrl = imgUrl .substring(4, imgUrl .length-1); 
    return imgUrl; 
}).each(function() { 
    // fail-safe for cached images which sometimes don't trigger "load" events 
    if(this.complete) $(this).load(); 
}); 
+0

Esperaría hasta que se cargue la imagen o hasta que hay un retorno en el valor de la propiedad 'background-image'? – Squirkle

+1

En realidad, lo que sucedió allí esperará a que se cargue la imagen ... en este caso, la imagen de fondo de la etiqueta del cuerpo ... – Reigel

+0

Es un truco muy bueno. ¿Como funciona? No puedo averiguar a qué $ ('') va dirigido ... – Squirkle

2
$('<img>').attr('src',function(){ 
    var imgUrl = $('#body').css('background-image'); 
    imgUrl = imgUrl .substring(5, imgUrl .length-2); 
    return imgUrl; 
}).load(function(){ 
    //Do Something 
}); 

no pudo evitar darse cuenta de que el código anterior no funciona en violín. Parece que es porque devuelve "url ('/ img-path.jpg')" en lugar de simplemente "/img-path.jpg".

Sin embargo, este método todavía falla en IE. Alguien tiene una solución ie?

+2

Lo he arreglado respuesta aceptada basada en su código y comentarios –

0
$(document).ready(function(){ 
$('img, .hasBGI').css('opacity',0) 

$('.hasBGI').each(function(){ 
    var $this = $(this) 
     $bgi = $('<img src="'+/*folderFix*/$this.css('backgroundImage')+'">') 
     // $bgi.css(/*hiddingStyle*/) 
     $('body').append($bgi) 
     $bgi.load(function(){ 
      $(this).remove() 
      $this.animate({opacity:1}) 
     }) 
}) 
$('img').load(function(){ 
    $(this).animate({opacity:1}) 
}) 

})

+0

Mi intención era imagesSmoothLoad – domSurgeon

Cuestiones relacionadas