2010-08-18 36 views
26

tôi là tạo ra hình ảnh mới sử dụngHình ảnh mới(), làm cách nào để biết hình ảnh có tải 100% hay không?

img = new Image(); 
img.src = image_url; 

Sau đó, tôi đang gán img.src để src thẻ img trong DOM

$("#my_img").attr("src", img.src); 

Làm thế nào tôi có thể biết rằng img.src có 100% tải ? Thực hành tốt nhất là gì? img.complete dường như với tôi ít lỗi trong một số trình duyệt.

Vì vậy, nói cách khác, tôi cần chỉ định img.src đến $("#my_img") chỉ sau img nó đã được tải 100%.

Cảm ơn bạn!

+0

bạn cũng có thể thêm một tấm séc để img.complete cho img.naturalWidth thấy http://stackoverflow.com/questions/1977871/check-if-an-image-is-loaded-no-errors-in -javascript – fadomire

Trả lời

47

Sử dụng các sự kiện load:

img = new Image(); 

img.onload = function(){ 
    // image has been loaded 
}; 

img.src = image_url; 

Cũng có một cái nhìn tại địa chỉ:

+0

Crossbrowser giải pháp này? – Kirzilla

+0

@Kirzilla: Tôi nghĩ vậy, bạn nên thử nó :) – Sarfraz

+3

Tôi tin rằng onload chỉ được kích hoạt nếu hình ảnh thực sự được tải lại. Nếu hình ảnh được lưu trong bộ nhớ cache, khi đó tải sẽ không được kích hoạt. Có ai xác nhận không? –

7

Sử dụng mô hình Promise:

function getImage(url){ 
     return new Promise(function(resolve, reject){ 
      var img = new Image() 
      img.onload = function(){ 
       resolve(url) 
      } 
      img.onerror = function(){ 
       reject(url) 
      } 
      img.src = url 
     }) 
    } 

Và khi gọi hàm, chúng tôi có thể xử lý phản hồi hoặc lỗi của nó khá gọn gàng.

getImage('imgUrl').then(function(successUrl){ 
    //do stufff 
}).catch(function(errorUrl){ 
    //do stuff 
}) 
+0

Đây là một giải pháp tốt hơn IMO. nếu OP đang sử dụng jQuery như được gắn thẻ, anh ta có thể làm '$ .when.apply ($, [])' trong đó "' [] '" là một mảng các lời hứa (tức là hỗ trợ cho nhiều hình ảnh). Đáng chú ý sự hỗ trợ về những lời hứa gốc cũng có. – AndFisher

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