Foros del Web » Programando para Internet » Javascript »

Comiéndome la cabeza con función relativamente fácil

Estas en el tema de Comiéndome la cabeza con función relativamente fácil en el foro de Javascript en Foros del Web. Espero no complicaros mucho la vida, pero llevo dos días con esta función. Sé que debe estar el problema en que se solapan las variables, ...
  #1 (permalink)  
Antiguo 22/02/2012, 13:10
 
Fecha de Ingreso: abril-2005
Ubicación: Barcelona
Mensajes: 101
Antigüedad: 19 años
Puntos: 0
Comiéndome la cabeza con función relativamente fácil

Espero no complicaros mucho la vida, pero llevo dos días con esta función. Sé que debe estar el problema en que se solapan las variables, por eso utilizo tanta Array, para intentar evitarlo. Cualquier aporte será bienvenido

Código:
for(var n = 1; n<10; n++){                      //Inicio bucle
        var imgNew = new Array();                          //Creo las dos Arrays que utilizo
	var imgAct = new Array();
        almimg(imgAct,n,imgNew);                          //Inicio función
}

function almimg(imgAct,n,imgNew){                    
	if(imgAct[n] == undefined){                        //Como imgAct[n] no está definida...
		imgAct[n] = 1;                                    //...le doy valor 1
	}
	imgNew[n] = new Image;                           //Almaceno nueva imagen en imgNew[n]
	imgNew[n].src = SECCIONES.NOMBRE[n]+"/"+SECCIONES.NOMBRE[n]+imgAct[n]+".png";//Creo la ruta
	imgNew[n].onload = function(){//Aqui es donde falla si n distinto de 1
		alert(imgNew[n].src);
		SECCIONES.CANT[n] = imgAct[n];
		imgAct[n]++;
		almimg(imgAct,n,imgNew);
	}
}
Mil gracias
  #2 (permalink)  
Antiguo 22/02/2012, 13:29
 
Fecha de Ingreso: abril-2005
Ubicación: Barcelona
Mensajes: 101
Antigüedad: 19 años
Puntos: 0
Respuesta: Comiéndome la cabeza con función relativamente fácil

Lo pongo algo más fácil. Igualmente, me funciona si i = 1 pero cuando i = 2 se me para la función cuando analiza si la imagen ha cargado:
Alguna idea?

Código:
for(var i = 1; i<5; i++){
	var imgAct = false;
	almimg(imgAct,i);
}
function almimg(imgAct,n){
	if(imgAct == false){
		var imgAct = 1;
	}
	imgNew = new Image;
	imgNew.src = SECCIONES.NOMBRE[n]+"/"+SECCIONES.NOMBRE[n]+imgAct+".png";
	imgNew.onload = function(){
		SECCIONES.CANT[n] = imgAct;
		alert(SECCIONES.CANT[n]);
		imgAct++;
		almimg(imgAct,n);
	}
}
  #3 (permalink)  
Antiguo 22/02/2012, 13:55
Avatar de goteen_mx  
Fecha de Ingreso: abril-2005
Ubicación: D.F.
Mensajes: 403
Antigüedad: 19 años, 1 mes
Puntos: 37
Respuesta: Comiéndome la cabeza con función relativamente fácil

como creas este objeto???


SECCIONES.NOMBRE[n]
__________________
Born to be free.
  #4 (permalink)  
Antiguo 22/02/2012, 20:41
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Comiéndome la cabeza con función relativamente fácil

buenas,
a ver si entiendo. ¿estas creando una precarga de un grupo de imagenes? lo que veo mal en ambos casos es que en el onload de la imagen vuelves a invocar almimg como para ir a la proxima imagen a cargar. pero en el bucle for estas haciendo mas o menos lo mismo, solo que invocas almimg tantas veces sea el ciclo. puedes crear la carga de imagen con el for o con la funcion... pero preferiblemente no con ambas a la vez.

en mi opinion personal, es mejor que lo hagas con la función y el evento onload en lugar del bucle. en el bucle se crean multiples peticiones http a la vez, lo cual podrias notar alguna lentitud al cargarse. sin embargo, con el onload se cargan una a la vez cada vez que la imagen termine de cargar. pero tambien debes considerar el factor de si la imagen demora mucho en cargar pasar al proximo, ya sea porque la petición http se congelo u otro factor.
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 02:07.