Foros del Web » Programando para Internet » Javascript »

llenar un array de imagenes por tamaño

Estas en el tema de llenar un array de imagenes por tamaño en el foro de Javascript en Foros del Web. Buenos días foro. estoy teniendo que buscar en un xml que contiene Urls de imagenes, aquellas que tienen un tamaño concreto y me está dando ...
  #1 (permalink)  
Antiguo 29/05/2012, 00:57
 
Fecha de Ingreso: mayo-2012
Mensajes: 49
Antigüedad: 7 años, 3 meses
Puntos: 0
Pregunta llenar un array de imagenes por tamaño

Buenos días foro.

estoy teniendo que buscar en un xml que contiene Urls de imagenes, aquellas que tienen un tamaño concreto y me está dando muchos problemas.

tan solo puedo usar javascript

este es mi código.

Código:
var xmlIE = cargarXMLDoc('http://10.xxx.xx.xxx/Datos/imagenEnorme.xml');
	var xIE = xmlIE.getElementsByTagName("elemento");
	for (var i = 0; i < xIE.length; i++){
		miImagen.src = xIE[i].getElementsByTagName("Imagen")[0].childNodes[0].nodeValue;
		miImagen.onload = function () {
			alert (this.src + " -> " + this.width + " x " + this.height);
			if (this.width == 320 && this.height == 197){
				contadorIE++;
				miArrayIE.push(this.src);
				}
			};
		}
	alert ("tamaño->" + miArrayIE.length + " contador-> " + contadorIE);
se que leo correctamente el xml y que le recorro.

pero la salida en los alert de esto, es

--> tamaño->0 contador-> 0
-->'url' -> 592 x 320

tan solo esto, esa Url, corresponde a la ultima imagen del archivo xml.

por lo que veo, primero se está ejecutando entero y después realiza las cargas de las imagenes?

como puedo solucionarlo?

gracias por adelantado
  #2 (permalink)  
Antiguo 29/05/2012, 12:03
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 10 años, 3 meses
Puntos: 1485
Respuesta: llenar un array de imagenes por tamaño

buenas.
el problema que tiene tu script es que es asíncrono. es decir, el script no espera a que se complete la petición http ‒ para cargar la imagen ‒ ni a que que se complete el evento onload. entonces, bucle como el bucle realiza todo de un golpe, al finalizar no se realiza ninguna de las peticiones, solo la última. ¿qué debes hacer? debes crear una especie de bucle en el mismo evento onload de la imagen de tal modo que una vez carga la imagen, extrae y almacena la información, luego cambia el src de la misma imagen. de esta manera se garantiza que se procese todas las imagenes. ahora, si una de las imagenes falla en cargar, creo que se rompe el ciclo.

Código:
image.onload = function(){
// procesar datos de la imagen;
this.src = proxima_url; 
// al cambiar el src, se realiza otra peticion y por tanto se vuelve a inicar el evento;
};
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 30/05/2012, 08:35
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 11 años, 2 meses
Puntos: 1011
Respuesta: llenar un array de imagenes por tamaño

Cita:
Iniciado por zerokilled Ver Mensaje
ahora, si una de las imagenes falla en cargar, creo que se rompe el ciclo.
para evitarlo, aunque no lo he probado, se puede usar un temporizador (setTimeout recursivo). de este modo aunque falle la carga de una de las imágenes, se fuerza a que se carge la siguiente
Cita:
(function loop(){
setTimeout(function(){

// logic here

// recurse
loop();

}, 1000);
})();
fuente
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}

Etiquetas: imagenes, onload, tamaño
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:21.