2010-04-22 39 views

Trả lời

10

Hành động đó là không đồng bộ; rất nhiều mã 'tải trước' hình ảnh dựa trên tính năng đó.

EDIT: Để cung cấp thêm một chút thông tin hữu ích nữa. Nếu bạn đang muốn có hành động nhất định chờ đồng bộ cho hình ảnh để tải qua đối tượng hình ảnh javascript, bạn có thể sử dụng các sự kiện onload, như vậy:

var img = new Image(); 
img.onload = function() { /* onLoad code here */ }; 
img.src = 'xxxxxx'; 
+2

Hãy nhận biết tải hình ảnh không đồng bộ khi thiết lập nguồn hình ảnh và thay đổi kích thước imediatelly sau khi tập ảnh src. https://hacks.mozilla.org/2011/01/how-to-develop-a-html5-image-uploader thay đổi kích thước có thể sẽ hoặc sẽ không hoạt động ... tải trọng phải được sử dụng ... – OSP

2

var img = new Image();

Đây là cách cũ tạo hình ảnh không được dùng nữa. Ưu tiên document.createElement('IMG') hoặc tạo một thông qua chuỗi và innerHTML.

Bây giờ, hình ảnh là replaced elements, có nghĩa là chúng tải bất cứ khi nào chúng đến, nhưng không gian được dành riêng cho chúng trong luồng bố cục nếu kích thước của chúng được chỉ định. (Nếu không, một không gian biểu tượng được dành riêng và màn hình sẽ được vẽ lại khi hình ảnh đến với các kích thước của nó trong tiêu đề, điều này có thể là một trải nghiệm người dùng không hài lòng, vì vậy bạn được khuyến khích kích thước hình ảnh sẵn sàng khi trang đang được hiển thị lần đầu tiên.)

+1

Không được chấp nhận? Có thật không? Tôi không tin nó đã từng là một phần của bất kỳ tiêu chuẩn nào ở nơi đầu tiên. –

+0

@Tim Down: Tôi chỉ có nghĩa rằng đây là cách tạo hình ảnh cũ (thập niên 90), không phải là một phần của thực tiễn hiện tại. – Robusto

+0

'Hình ảnh mới()' tiếp tục hoạt động trong mọi trình duyệt có thể đọc được hỗ trợ hình ảnh và tôi sẽ ưu tiên nó hơn 'innerHTML'. Đồng ý rằng 'document.createElement (" IMG ")' là thích hợp hơn. –

4

Thay đổi src không đồng bộ.

image.src = "http://newimage-url";

sẽ trở lại ngay lập tức và trình duyệt sẽ tải hình ảnh mới trong chủ đề khác. Trước khi được tải hoàn toàn, tất cả thuộc tính của thẻ <img> sẽ không chính xác, chẳng hạn như chiều rộng hoặc chiều cao.

Vì vậy, $(image).width() không thể trả lại chiều rộng của hình ảnh mới.

Như @Deleleased đã chỉ ra, bạn có thể triển khai phương thức 'khi tải', mã sẽ chỉ được thực thi sau khi hình ảnh đã tải xong. jQuery của load() có thể thực hiện điều này một cách dễ dàng.

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