Ver Mensaje Individual
  #12 (permalink)  
Antiguo 16/03/2013, 03:39
Profesor_Lambetain
 
Fecha de Ingreso: septiembre-2010
Mensajes: 67
Antigüedad: 14 años, 4 meses
Puntos: 1
Respuesta: Anidamiento de setInterval/setTimeout ¿es posible?

Cita:
Iniciado por caricatos Ver Mensaje
Hola:

Viendo el código me parece que es demasiado extenso... además, si terminar la temporización solo depende del campo del formulario, con una sola condición bastaría; y poner argumento a la función no parece buena idea... otra cosa, los campos de formulario son cadenas y no números, así que lo correcto es entrecomillarlo (aunque evidentemente pueda parecer innecesario):

Código:
h = 0;
fotos = ["FotoshowOFF.jpg" ,"FotoshowOFF-2.jpg"];
function changeimage() {
	if(document.forms[0].elements[10].value != "1")
		clearInterval(control)
	else
		document.images[1].src=fotos[++h % 2];
}
control = setInterval(changeimagen, 1500);
Te comento la idea:

No parece que importe entre alternar 1 y 2 o entre 0 y 1; además, si dividimos cualquier número entre 2, obtendremos dos posibles valores: 0 y 1; así que ¿por qué no, tan solo incrementamos un número entre 2 y rescatamos el resto y lo usamos para obtener uno de los dos valores de un array de dos elementos...

Fíjate sobre todo en la idea de usar menos condiciones.

Saludos
Gracias Caricatos.

Bien, tu código (que transcribo adaptado) funciona OK:

Código:
function fotosbig() { // Función que, entre otras muchas cosas, llama a changeimage().
.....
...
h=0;
fotos=new Array("FotoshowOFF.jpg","FotoshowOFF-2.jpg");
control=setInterval("changeimage();",1500);
.....
...
} // Fin función fotosbig.

function changeimage() {
	if(document.forms[0].elements[10].value!="1") {
		clearInterval(control);
	} else {
		document.images[1].src=fotos[++h % 2];
	}
} // Fin función changeimage.
... y es más corto porque tiene menos instrucciones y menos condiciones en el condicional, pero a cambio utiliza una variable más: el vector fotos(2).

Ahora bien, hay unas cositas que no entiendo en tu código:

1. Si no transfiero parámetros/variables entre la función original de llamada (fotosbig): ¿cómo se entera la función invocada (changeimage) de la existencia de la variable "control"? ¿O es que las variables asociadas a métodos del objeto window (setInterval en este caso) están accesibles a todo el código?

2. De igual modo: ¿cómo se entera la función invocada (changeimage) de la existencia y valor de la variable h en cada invocación?

[OFF Topic] Quizás tú, sin saberlo, me has dado inmensa luz al decirme que "... otra cosa, los campos de formulario son cadenas y no números, así que lo correcto es entrecomillarlo"... no te puedes imaginar los dolores de cabeza que me ha ocasionado este desconocimiento... virguerías hube de hacer con los métodos String, Number, parseInt. MUCHAS GRACIAS, caricatos. [/OFF]