2010-04-22 5 views

Respuesta

10

Esa acción es asincrónica; una gran cantidad de código de "carga previa" de imágenes se basa en esa característica.

EDITAR: Para dar un poco más de información útil también. Si tienes intención de tener ciertas acciones esperan de forma sincronizada para que las imágenes se cargan a través del objeto de imagen de JavaScript, puede utilizar el proceso de carga, así:

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

Tenga en cuenta la carga de imágenes asíncrona al configurar el origen de la imagen y el cambio de tamaño de forma inmediata después de establecer la configuración de la imagen. https://hacks.mozilla.org/2011/01/how-to-develop-a-html5-image-uploader cambiar el tamaño podría o no funcionará ... onload tienen que ser utilizados ... – OSP

2

var img = new Image();

Esta es la forma antigua de crear imágenes, que ha quedado en desuso. Prefiera document.createElement('IMG') o cree uno a través de cadenas y innerHTML.

Ahora, las imágenes son replaced elements, lo que significa que se cargan cada vez que llegan, pero el espacio está reservado para ellas en el flujo de disposición si se especifican sus dimensiones. (Si no, se reserva un espacio del tamaño de un icono y la pantalla se vuelve a dibujar cuando la imagen llega con sus dimensiones en el encabezado; esto puede ser una experiencia de usuario desconcertante, por lo que se recomienda tener las dimensiones de imagen listas mientras se está procesando la primera vez.)

+1

¿Obsoleto? De Verdad? No creo que haya sido alguna vez parte de ningún estándar en primer lugar. –

+0

@Tim Down: solo quiero decir que esta es la forma antigua (c. 1990) de crear imágenes, que no es parte de la práctica actual. – Robusto

+0

'nueva imagen()' continúa funcionando en todos los navegadores de secuencias de comandos que admite imágenes, y yo lo preferiría a 'innerHTML'. Acordó que 'document.createElement (" IMG ")' es preferible. –

4

Cambio src es asíncrona.

El código

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

devolverá inmediatamente y el navegador se carga nueva imagen en otro hilo. Antes de que esté completamente cargado, todos los atributos de esa etiqueta <img> no serán correctos, como el ancho o el alto.

Así que $(image).width() puede que no devuelva el ancho de la nueva imagen.

Como señaló @Dereleased, puede implementar un método 'en carga', cuyo código se ejecutará solo después de que la imagen haya terminado de cargarse. jQuery's load() puede cumplir esto fácilmente.

Cuestiones relacionadas