Foros del Web » Programando para Internet » Javascript »

Redimensionar y setTimeout

Estas en el tema de Redimensionar y setTimeout en el foro de Javascript en Foros del Web. Hola a todos. Vereis tengo un problema, estoy intentando redimiensionar una imagen, pero que esta se haga de poco en poco y para eso quiero ...
  #1 (permalink)  
Antiguo 04/06/2005, 02:20
 
Fecha de Ingreso: junio-2003
Ubicación: Valencia
Mensajes: 334
Antigüedad: 20 años, 10 meses
Puntos: 0
Redimensionar y setTimeout

Hola a todos.
Vereis tengo un problema, estoy intentando redimiensionar una imagen, pero que esta se haga de poco en poco y para eso quiero que lo haga segun un intervalo de tiempo. Para ello utilizo el siguiente codigo:

function camb_imag()
{for (i=0; i<10; i++)
setTimeout(tiempo, 1000);
}
function tiempo()
{
document.imagen.width=document.imagen.width+i;
}

La cuestion es que lo hace, pero no como yo quiero pues primero hace el for hasta 10 y despues llama a la funcion para modificar el tamaño. Lo que a mi me gustaria que hiciera seria que cada vez de "i" llamara a la funcion como creo que deberia ser conforme lo que esta escrito.
Alguien me puede echar una mano?
Muchas gracias
__________________
http://reunga.com
Desarrollo de aplicaciones informáticas
  #2 (permalink)  
Antiguo 04/06/2005, 02:36
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 3 meses
Puntos: 772
Hola kavalerian

Intentalo de esta forma:
Código PHP:
i=0;
function 
camb_imag() {
  
document.imagen.width=document.imagen.width+i;
  
i++;
  if (
i<10setTimeout(tiempo1000);

Espero que te sirva. Saludos,
  #3 (permalink)  
Antiguo 04/06/2005, 02:44
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 1 mes
Puntos: 1284
Hola a todos:

Los parámetros de setTimeout son un texto (cadena) y un número...

tiempo es una función, así que no va a funcionar como lo haces (ni como lo hace JavierB) ...

setTimeout("tiempo()", 1000);

pero como puedes pasar parámetros lo mejor sería algo así:

function camb_imag() {
setTimeout("tiempo(0)", 1000);
}
function tiempo(i) {
document.imagen.width=document.imagen.width+1;
if (i++ < 10) setTimeout("tiempo(" + i + ")", 1000);
}

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #4 (permalink)  
Antiguo 04/06/2005, 02:49
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 3 meses
Puntos: 772
¡Oops! Me he confundido por abusar del copy&paste (gracias por el toque caricatos )

Mi código debería quedar así:
Código PHP:
 i=0;
function 
camb_imag() {
  
document.imagen.width=document.imagen.width+i;
  
i++;
  if (
i<10setTimeout('camb_imag()'1000);

Saludos,
  #5 (permalink)  
Antiguo 04/06/2005, 03:01
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 1 mes
Puntos: 1284
Hola Javi:

Me parece que tampoco sería buena idea, ya que el bucle se hace inmediatamente, entonces el retraso inicial es el unico que se notaría...

Otra forma de usar el bucle es darle valores al retraso de esta manera:

for (i = 0; i < 10; i ++)
setTimeout("tiempo()", 1000 * i);

También se podría introducir el valor de i en la llamada como puse antes.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #6 (permalink)  
Antiguo 04/06/2005, 03:16
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 3 meses
Puntos: 772
Hola caricatos

Lo que he hecho es prescindir del bucle y de la función tiempo(), juntandolo todo en la función camb_imag(). La verdad es que en los primeros mensajes he contestado de memoria (de ahí también los fallos), pero ahora lo he probado y me ha funcionado bien.

Saludos,
  #7 (permalink)  
Antiguo 04/06/2005, 03:51
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 1 mes
Puntos: 1284
Hola otra vez:

Si bien funciona, me parece que lo hace de una forma que no es la esperada:

Hice este código con las 3 opciones:

Código:
<html>
<head>
<script>
function camb_imag() {
setTimeout("tiempo(0)", 100);
}
function tiempo(i) {
document.imagen.width=document.imagen.width+1;
if (i++ < 10) setTimeout("tiempo(" + i + ")", 100);
}
function tiempo2() {
document.imagen.width=document.imagen.width+1;
if (i++ < 10) setTimeout("tiempo2(" + i + ")", 100);
}
function camb_imag3() {
for (i = 0; i < 10; i ++)
setTimeout("tiempo2()", 100 * i);
}

i=0; 
function camb_imag2() { 
  document.imagen.width=document.imagen.width+i; 
  i++; 
  if (i<10) setTimeout('camb_imag2()', 100); 
} 

</script>
</head>
<body>
<img src="../miemoticon.gif" name="imagen" />
<input type="button" onclick="camb_imag()" value="probar"/>
<input type="button" onclick="i = 0; camb_imag2()" value="probar2"/>
<input type="button" onclick="i = 0; camb_imag3()" value="probar3"/>
</body>
</html>
Puedes copiarlo y pegarlo directamente en mi probador: http://www.pepemolina.com/probador/index.html

El botón probar2 es tu implementación y los otros son las 2 implementaciones que planteé. El efecto es menos progresivo...

Bueno. Curiosidades.

Saludetes
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #8 (permalink)  
Antiguo 04/06/2005, 04:58
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 1 mes
Puntos: 1284
Hola otra vez:

Ya he visto la diferencia...
Yo hacía el incremento en 1 y tú (JavierB) incrementas en el valor de i (1..10)

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #9 (permalink)  
Antiguo 04/06/2005, 05:43
 
Fecha de Ingreso: junio-2003
Ubicación: Valencia
Mensajes: 334
Antigüedad: 20 años, 10 meses
Puntos: 0
Perfecto, muchas gracias a los dos.
Ya lo tengo claro y sale perfectamente.
__________________
http://reunga.com
Desarrollo de aplicaciones informáticas
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 06:43.