2010-07-19 119 views
12

有沒有辦法,使用jQuery來觸發加載CSS背景圖像的事件?背景圖片加載觸發事件

+0

的可能的複製[我如何檢查是否背景圖像加載?](http://stackoverflow.com/questions/5057990/how-can-i-check-if-a-background-image-is-loaded) – azerafati 2016-10-02 12:39:18

回答

22

,你可以像這樣做,

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

這會等到圖像加載或直到有價值的回報'background-image'屬性? – Squirkle 2010-07-19 14:04:38

+1

實際上發生了什麼,它是否會等待圖像加載...在這種情況下,身體標記的背景圖像... – Reigel 2010-07-19 14:37:48

+0

這是一個非常巧妙的技巧。它是如何工作的?我無法弄清楚$('')的目標是什麼...... – Squirkle 2010-07-19 15:21:46

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

不由得注意到,上面的代碼不撥弄工作。看起來像它,因爲它返回「url('/ img-path.jpg')」而不是「/img-path.jpg」。

但是這種方法在IE中仍然失敗。任何人有一個即修復?

+2

我已經修復根據您的代碼和意見接受的答案 – 2012-03-09 19:33:11

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

我的意圖是圖像平滑下載 – domSurgeon 2013-07-05 15:01:33