2010-07-19 26 views
12

Có cách nào, sử dụng jQuery, để kích hoạt sự kiện khi tải hình nền CSS không?Sự kiện kích hoạt khi tải hình nền

+0

có thể trùng lặp của [Làm thế nào tôi có thể kiểm tra nếu một hình nền được tải?] (http://stackoverflow.com/questions/5057990/how-can-i-check-if-a-background-image-is-loaded) – azerafati

Trả lời

22

bạn có thể làm điều đó như thế này,

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

Điều này có chờ cho đến khi hình ảnh được tải hoặc cho đến khi có một lợi nhuận trên giá trị của thuộc tính 'background-image'? – Squirkle

+1

thực sự những gì đã xảy ra ở đó là nó sẽ chờ cho hình ảnh tải ... trong trường hợp này là hình nền của thẻ body ... – Reigel

+0

Đó là một mẹo khá gọn gàng. Làm thế nào nó hoạt động? Tôi không thể tìm ra $ ('') nào đang nhắm mục tiêu ... – 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 
}); 

Không thể giúp đỡ, nhưng nhận thấy rằng các mã trên không hoạt động trong fiddle. Có vẻ như nó bởi vì nó trả về "url ('/ img-path.jpg')" thay vì chỉ "/img-path.jpg".

Tuy nhiên phương pháp này vẫn không thành công trong IE. Bất cứ ai có một nghĩa là sửa chữa?

+2

Tôi đã cố định câu trả lời được chấp nhận dựa trên mã và nhận xét của bạn –

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

Ý định của tôi là hình ảnhSmoothLoad – domSurgeon

Các vấn đề liên quan