Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: j_junquera en 13 Abril 2013, 16:37 pm



Título: Problema con script de transparencia
Publicado por: j_junquera en 13 Abril 2013, 16:37 pm
Hola, es mi primer post en este foro, llevaba mucho sin entrar.
Mi problema es que estoy intentando hacer un script de javascript (soy novato en este leguaje) para dar transparencia gradual a una imagen, pero me da problemas porque solo saca el valor final de transparencia. Me da la impresión de que solo saca la última salida de la función al probarlo en la consola de firebug, pero no sé arreglarlo.

El código es el siguiente:

Código:

//Método para que la función pare y hacerlo gradual
function sleep(milisegundos) {
  var inicio = new Date().getTime();
  while((new Date().getTime() - inicio) < milisegundos){}
}

//Método para la transparencia
function transparente(){
var elemento = document.getElementById("aqua");
 
        //De 0.02 en 0.02 va bajando la opacidad del elemento
for(i=1; i>=0;i=i-0.02){
elemento.style.opacity=i;
                //Espera para hacerlo gradual
sleep(200);
}
}


Espero que alguien pueda ayudarme, llevo ya mucho tiempo comiendome el tarro y googleando pero nada...

Gracias de antemano, un saludete ;D


Título: Re: Problema con script de transparencia
Publicado por: Pablo Videla en 13 Abril 2013, 16:53 pm
Yo que tu, trabajaría con jQuery

http://jquery-manual.blogspot.com/2012/05/generar-transparencia-con-fadeto-jquery.html

1 minuto en google xD


Título: Re: Problema con script de transparencia
Publicado por: j_junquera en 16 Abril 2013, 12:06 pm
Si, si el problema no es poder darle la transparencia gradual, acerca de eso sí que he encontrado mil soluciones, de lo que me pica la curiosidad es de saber cómo podría hacerlo sin recurrir a nada fuera de mi código (al igual que en otros lenguajes se pueden hacer tareas asíncronas que modifiquen la GUI)...


Título: Re: Problema con script de transparencia
Publicado por: #!drvy en 16 Abril 2013, 14:53 pm
No hagas un sleep, considera utilizar un Interval (timer) que se ejecute cada X ms y se detenga una vez el valor de i ha llegado a 10.

Código
  1. var gradual = function(){
  2.   var elemento = document.getElementById("aqua");
  3.   var i = 0;
  4.   // Abrimos un Timer que se ejecute cada 150 ms.
  5.   var chipiron = setInterval(function(){
  6.      // Si el valor de i es menor o igual a nueve...
  7.      if(i<=9){
  8.         elemento.style.opacity="0."+i;
  9.         i++;
  10.      // En caso de que el valor sea mayor.
  11.      } else {
  12.         // Opacidad 0%
  13.         elemento.style.opacity="1";
  14.         // Limpiamos el Timer
  15.         window.clearInterval(chipiron);
  16.         // Devolvemos True.
  17.         return true;
  18.      }
  19.   },150);
  20. };

Y al reves:
Código
  1. function gradual(){
  2.   var elemento = document.getElementById("aqua");
  3.   var i = 9;
  4.   // Abrimos un Timer que se ejecute cada 150 ms.
  5.   var chipiron = setInterval(function(){
  6.      // Si el valor de i es mayor o igual a 1
  7.      if(i>=1){
  8.         elemento.style.opacity="0."+i;
  9.         i--;
  10.      // En caso de que el valor sea menor
  11.      } else {
  12.         // Opacidad 0%
  13.         elemento.style.opacity="1";
  14.         // Limpiamos el Timer
  15.         window.clearInterval(chipiron);
  16.         // Devolvemos True.
  17.         return true;
  18.      }
  19.   },150);
  20. };

Saludos


Título: Re: Problema con script de transparencia
Publicado por: j_junquera en 19 Abril 2013, 13:01 pm
¡Perfecto!  :D
Muchísimas gracias. No conocía el método setInterval y por eso hice el sleep (vengo de hacer Java, tiendo a usar lo mismo aquí), pero este me ha gustado.
Muy agradecido, de verdad. Un saludo ;D


Título: Re: Problema con script de transparencia
Publicado por: eltec en 23 Abril 2013, 10:15 am
Muchas gracias, tenia un problema similar y este thread me fue muy útil

Un saludo