Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Demora en javascript

Estas en el tema de Demora en javascript en el foro de Javascript en Foros del Web. Hola, estoy haciendo un banner con imagenes que se esfuman, lo que necesito es prolongar el tiempo de transición entre el camio de imagen. como ...
  #1 (permalink)  
Antiguo 10/06/2014, 17:46
 
Fecha de Ingreso: abril-2007
Ubicación: Merlo
Mensajes: 314
Antigüedad: 17 años
Puntos: 3
Demora en javascript

Hola, estoy haciendo un banner con imagenes que se esfuman, lo que necesito es prolongar el tiempo de transición entre el camio de imagen.
como lo puedo hacer?
Pongo el codigo
Código PHP:
<script
var 
nimg 0;
var 
imagen = ["moto01.png","moto02.png"];
function 
nada(i)
{
    
    
document.images['img_moto'].style.opacity 1/i;
    
document.images['img_moto'].style.filter "alpha(opacity="+100-i+")";
    
//clearTimeout(0);
}
function 
cambia()
{    
    var 
100;
    while(
1)
    {
        
setTimeout("nada("+i+")"5000); 
        
-= 10;
    }    
    
document.images['img_moto'].src =  imagen[nimg];
    var 
0;
    while(
<= 100)
    {
        
        
setTimeout("nada("+i+")"5000); 
        
+= 10;
    }
    
//alert(nimg);
    
if(nimg == 0)
    {
        
nimg++;
    }
    else
    {
        
nimg 0;
    }
    
}

setInterval('cambia()'2500);
</script>
<body>
<img src="moto01.png" name="img_moto" border="0">
</body> 
el cambio de imagen lo hace, pero quiero
  #2 (permalink)  
Antiguo 10/06/2014, 18:45
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Demora en javascript

El cambio lo tienes que hace en esta línea:

Código Javascript:
Ver original
  1. t = setInterval('cambia()', 2500);

Ese 2500 indica que cada 2 segundos y medio se ejecutará la función cambia(). Si quieres que el intervalo sea mayor, solo aumenta la cifra. Aquí tienes otra opción para tu rotador de imágenes.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 11/06/2014, 12:36
 
Fecha de Ingreso: abril-2007
Ubicación: Merlo
Mensajes: 314
Antigüedad: 17 años
Puntos: 3
Respuesta: Demora en javascript

El cambio de imagen lo hace, lo que quiero, es que en ese cambio quiero que la imagen que desaparece, lo haga desvaneciéndose lentamente.
  #4 (permalink)  
Antiguo 11/06/2014, 13:00
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Demora en javascript

ejecuta este código del aporte
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}

Última edición por IsaBelM; 11/06/2014 a las 13:56 Razón: me equivoqué de post
  #5 (permalink)  
Antiguo 11/06/2014, 13:30
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Demora en javascript

La verdad es que noto muy ineficiente y poco práctica la forma en que haces el cambio, llamas a una función varias veces en dos loops para hacer algo que podrías hacer en menos líneas y sin utilizar tantos recursos de sistema.

Código HTML:
Ver original
  1. <img class = "ejemplo" src = "imagen1.jpg" />
  2. <img class = "ejemplo" src = "imagen2.jpg" />
  3. <img class = "ejemplo" src = "imagen3.jpg" />

Código Javascript:
Ver original
  1. var imagenes = document.getElementsByClassName("ejemplo"),
  2.     total = imagenes.length,
  3.     posicion = 0,
  4.     cambiar = function (){
  5.         imagenes[posicion].style.opacity = 0;
  6.         posicion = posicion == total - 1 ? 0 : ++posicion;
  7.         imagenes[posicion].style.opacity = 1;
  8.     };
  9.  
  10. imagenes[posicion].style.opacity = 1;
  11. setInterval(cambiar, 3000);

Código CSS:
Ver original
  1. .ejemplo{
  2.     position: absolute;
  3.     opacity: 0;
  4.     transition: .75s;
  5. }

En el documento, tenemos 3 elementos de imagen con la clase "ejemplo", mientras que en el código JS, tomamos a dichos elementos por su clase, obtenemos el total de elementos, declaramos un contador que empezará en cero y una función que hará el cambio de imágenes. Cuando haya cargado la ventana, se muestra a la primera imagen y con el método setInterval, ejecutaremos la función previamente creada cada 3 segundos (3000 milisegundos). En la función, ocultamos a la imagen actual y actualizamos el valor del contador; si es igual a la posición que ocupa la última imagen en el array imagenes (el total menos uno), le asignamos el valor cero para que se muestre la primera imagen, creando así un efecto de carrusel, pero si todavía no alcanza a dicho valor, incrementamos su valor en uno, mostrando así a la siguiente imagen en la secuencia. Finalmente, mostramos a la imagen que corresponda con el valor actualizado del contador.

Como veo que utilizar la propiedad filter para IE, te sugiero que adaptes ese ejemplo a lo que necesitas. Lo mismo va para el método getElementsByClassName, el cual solo tiene soporte desde IE9. Para ese caso, puedes hacer lo siguiente:

Código Javascript:
Ver original
  1. var elementos = document.getElementsByTagName("img"),
  2.     total = elementos.length,
  3.     imagenes = [];
  4.  
  5. for (var i = 0; i < total; i++)
  6.     if (elementos[i].className == "ejemplo")
  7.         imagenes.push(elementos[i]);
  8.  
  9. var totalImagenes = imagenes.length;

Un ejemplo en ejecución:



Nota: Hago el filtrado por la clase y no por el tipo de elemento pues pueden haber más imágenes en el documento y éstas se verían afectadas.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #6 (permalink)  
Antiguo 11/06/2014, 14:13
 
Fecha de Ingreso: abril-2007
Ubicación: Merlo
Mensajes: 314
Antigüedad: 17 años
Puntos: 3
Respuesta: Demora en javascript

El Javascript no es mi fuerte!!!
Gracias por sus ayudas!!!
Desconocía la existencia de esta aplicación.
Logre hacerlo funcionar perfectamente!!!!
  #7 (permalink)  
Antiguo 11/06/2014, 14:33
 
Fecha de Ingreso: abril-2007
Ubicación: Merlo
Mensajes: 314
Antigüedad: 17 años
Puntos: 3
Respuesta: Demora en javascript

Se que lo tilde como solucionado, pero no funciona en IE9.
el error esta en getElementsByTagName
Cita:
Detalles de error de página web

Agente de usuario: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E; BRI/2)
Fecha: Wed, 11 Jun 2014 20:38:57 UTC


Mensaje: El objeto no acepta la propiedad o el método 'getElementsByClassName'
Línea: 17
Carácter: 1
Código: 0
URI: http://localhost/prueba/
es el error que tira IE9
en Chrome y FF funciona perfecto!!!
  #8 (permalink)  
Antiguo 11/06/2014, 20:07
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Demora en javascript

Veo que no leíste lo último que dije:

Cita:
Iniciado por Alexis88 Ver Mensaje
Como veo que utilizas la propiedad filter para IE, te sugiero que adaptes ese ejemplo a lo que necesitas. Lo mismo va para el método getElementsByClassName, el cual solo tiene soporte desde IE9. Para ese caso, puedes hacer lo siguiente:

Código Javascript:
Ver original
  1. var elementos = document.getElementsByTagName("img"),
  2.     total = elementos.length,
  3.     imagenes = [];
  4.  
  5. for (var i = 0; i < total; i++)
  6.     if (elementos[i].className == "ejemplo")
  7.         imagenes.push(elementos[i]);
  8.  
  9. var totalImagenes = imagenes.length;
Realiza ese cambio, yo lo hice y funciona sin problemas en IE8 y 9.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #9 (permalink)  
Antiguo 12/06/2014, 12:20
 
Fecha de Ingreso: abril-2007
Ubicación: Merlo
Mensajes: 314
Antigüedad: 17 años
Puntos: 3
Respuesta: Demora en javascript

Lo hice, pero no hace el efecto de esfumado al cambiar la imagen.
No importa, en el 11 funciona y el cliente deberá actualizar para verlo bien!!!

Etiquetas: demora
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 18:20.