2013-04-13 26 views
6

Tôi tự hỏi nếu có cách nào phát hiện sự kiện tải của nhiều ảnh (đặc biệt, một hàm sẽ thực thi khi ảnh cuối cùng trong một tập đã cho tải xong).Phát hiện nhiều sự kiện tải ảnh

Ví dụ: người dùng nhấp vào liên kết và lighbox xuất hiện với 10 hình ảnh. Khi tất cả hình ảnh đã được tải, thanh tải sẽ biến mất.

jQuery(".lightbox-image").each(function(){ 
    var image = jQuery(this); 
    jQuery('<img />').attr('src', image.attr('src')).load(function(){ 
     hideLoadingBar(); 
    }); 
}); 

Thật không may này kích hoạt hideLoadingBar(); quá sớm (sau khi một ảnh đã hoàn tất tải).

P.S.
Tôi cũng cần chức năng của mình để hoạt động sau khi hình ảnh được lưu vào bộ nhớ cache: jQuery('#img1, #img2').load(); sẽ không hoạt động.

+0

xem http://stackoverflow.com/a/9624426/235710 –

+0

@MohammadAdil Đây chính xác là những gì không hoạt động khi hình ảnh đã được lưu vào bộ nhớ cache. Và tôi không thể 'trigger ('load')' bằng tay bởi vì nó sẽ thực thi 'hideLoadingBar()' quá sớm. – Atadj

+0

nếu tôi không tải sai luôn luôn là một reqax req, bạn đã thử tiến trình gọi lại? – steo

Trả lời

2

Kiểm tra plugin jQuery imagesLoaded này, nó phải phù hợp với nhu cầu của bạn mà tôi nghĩ.

1

Vâng, có vẻ như không ai có ý tưởng tốt hơn, vì vậy dưới đây là giải pháp/giải pháp của tôi. Câu trả lời khác cho câu hỏi này có lẽ là những gì bạn muốn sử dụng vì đó là một thư viện được tạo ra đặc biệt cho rằng nhưng đây là giải pháp mà tôi sẽ sử dụng vì nó ngắn và đơn giản:

var allImages = jQuery(".lightbox-image").length; 
var counter = 0; 
jQuery(".lightbox-image").each(function(){ 
    var image = jQuery(this).find('.myimage'); 
    jQuery('<img />').attr('src', image.attr('src')).load(function(){ 
     counter++; 
     if(counter >= allImages){ 
      hideLoadingBar(); 
     } 
    }); 
}); 

trình cho hình ảnh được lưu trữ và hình ảnh không được lưu trong bộ nhớ cache.

+0

Tôi không nghĩ rằng sử dụng lib là ý tưởng tốt cho một nhiệm vụ đơn giản như vậy. –

+0

Điều gì sẽ xảy ra với giải pháp này nếu bạn có, ví dụ 10 hình ảnh lớn hơn hiện đang tải khi chức năng này thực thi. Sau đó, bạn sẽ bắt đầu 10 lượt tải xuống khác của cùng một hình ảnh, đúng không? Có lẽ hiệu suất chậm lại là chấp nhận được cho bạn. –

+0

Đồng thời kiểm tra các quirks của trình duyệt [được ghi trên trang plugin] (https://github.com/desandro/imagesloaded/wiki/Browser-quirks). –