2010-07-19 19 views
12

Gibt es eine Möglichkeit, mit jQuery ein Ereignis beim Laden eines CSS-Hintergrundbilds auszulösen?Triggerereignis auf Hintergrundbild laden

+0

Mögliche Duplikat [Wie kann ich, wenn ein Scheck Hintergrundbild geladen?] (http://stackoverflow.com/questions/5057990/how-can-i-check-if-a-background-image-is-loaded) – azerafati

Antwort

22

Sie es so tun könnten,

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

Würde dies warten, bis das Bild geladen ist oder bis es gibt eine Rendite auf den Wert der 'Hintergrundbild' Eigenschaft? – Squirkle

+1

eigentlich was passiert ist es wird warten, bis das Bild geladen wird ... in diesem Fall das Hintergrundbild des Body-Tags ... – Reigel

+0

Das ist ein ziemlich netter Trick. Wie funktioniert es? Ich kann nicht herausfinden, was $ ('') zielt auf ... – 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 
}); 

kann nicht umhin zu bemerken, dass der obige Code nicht in Geige funktioniert. Sieht so aus, weil es "url ('/ img-path.jpg')" anstatt nur "/img-path.jpg" zurückgibt.

Allerdings schlägt diese Methode immer noch in IE. Jeder hat einen ie Fix?

+2

Ich habe behoben akzeptierte Antwort basierend auf Ihrem Code und Kommentare –

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

Meine Absicht war, BilderSmoothLoad – domSurgeon

Verwandte Themen