2010-12-13 28 views
5

Tôi đang sử dụng javascript để tải trước một số hình ảnh với đoạn mã sau:Chặn Javascript cho đến khi quá trình tải trước hình ảnh hoàn tất?

// do the following for each image where 'this' is the path 
(new Image()).src = this; 

này hoạt động tốt - trong firebug tôi có thể thấy mỗi hình ảnh tải về được bắn ra sau mỗi lần lặp.

Vấn đề của tôi là tôi muốn chặn cho đến khi tải xuống thực tế hoàn tất. Nói cách khác, tôi muốn hiển thị hộp thoại "tải xuống hình ảnh" cho người dùng cho đến khi tất cả hình ảnh đã tải xuống xong. Ngay bây giờ nếu tôi chỉ đơn giản hiển thị hộp thoại trước khi vòng lặp tải trước được thực thi (và xóa hộp thoại sau khi vòng lặp hoàn tất), nó chỉ cần chụp các yêu cầu tải xuống KHÔNG tải xuống thực sự hoàn tất.

Vì có vẻ như việc tải xuống thực tế không đồng bộ, có cách nào để chặn cho đến khi tất cả tải xuống đã hoàn tất không?

Trả lời

0

Bạn có thể sử dụng onload phương pháp được kích hoạt khi hình ảnh sẽ được tải về thành công, sau đó thiết lập bước tiếp theo của bạn trong onload chức năng.

Đây là trường W3 của tài liệu tham khảo:

http://www.w3schools.com/jsref/event_img_onload.asp

0

Bạn có thể ẩn div có nội dung bạn đang tải trước hình ảnh của mình trong khi hiển thị div "đang tải" cho đến khi quá trình tải trước hoàn tất. Nó sẽ giống như thế này:

$('#content').hide(); 
$('#loading').show(); 

// for loop loading images here 

$('#loading').hide(); 
$('#content').show(); 
+0

nhờ nhưng tôi không nghĩ rằng bạn hiểu câu hỏi của tôi. vòng lặp tải hình ảnh chỉ kích hoạt tải xuống - nó không chặn cho đến khi hoàn thành. – lok

2
$(function() { 
    var imgs = $('img'); 
    var length = imgs.length; 
    var loaded = 0; 
    $('img').hide().each(function() { 
     $(this).bind('load', function() { 
      if ((++loaded) === length) { 
       imgs.show(); 
      }else { 
       //show images are still downloading 
      } 
     }); 
    }); 
}); 
+0

Không cần một '.each()' khi ràng buộc :) –

+0

@nick u có thể giải thích thêm một chút, tôi quan tâm đến việc học nó .. Tôi đã không làm việc với jQuery trong 3 tuần qua :) –

+1

'.bind()' hoạt động trên tất cả các phần tử trong tập hợp, và cũng có một phím tắt cho hầu hết các sự kiện, như '.load()', vì vậy ở trên bạn sẽ thu hẹp nó xuống: http: //www.jsfiddle. net/nick_craver/Uu2jz/... lưu ý điều này giả định '.src' được đặt sau và hình ảnh chưa được tải, nếu đó là trường hợp bạn cần lặp lại và kiểm tra' .complete', kích hoạt 'load' sự kiện trên những người có. –

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