Buscar en este blog

miércoles, 12 de diciembre de 2007

JAVASCRIPT. Hilos. setInterval. clearInterval.

Bueno esto es una especie de "hilos" para javascript.
Siempre que usaba setInterval ó setTimeOut no sabía como finalizar su ejecución correctamente.
Al devolver la función setInterval un valor o identificador, lo recojo en una variable y así podemos parar la ejecución con clearInterval(hilo);

// declaramos el hilo

var hilo;

// ejecutamos el hilo

hilo=setInterval("llamadaAfuncion()",100);

// eliminamos el hilo

clearInterval(hilo);

EL siguiente código javascript lo utilicé para hacer aparecer poco a poco las imágenes y también para hacerlas desaparecer poco a poco.
En el ejemplo uso setInterval() y clearInterval().


<script type="text/javascript">

var opacidad=0;

var hilo;

function mostrarImagen(id) {
clearInterval(hilo);
opacidad=0;
document.getElementById(id).style.opacity=".0";
document.getElementById(id).style.filter="alpha(opacity=0)";
hilo=setInterval("hacerOpaco('"+id+"')",50);
}

function ocultarImagen(id) {
clearInterval(hilo);
opacidad=100;
hilo=setInterval("hacerTransparente('"+id+"')",50);
}



function hacerOpaco( id ) {
opacidad++;

opacidadFireFox=opacidad/100;

document.getElementById(id).style.opacity=opacidadFireFox;
document.getElementById(id).style.filter="alpha(opacity="+opacidad+")";

if (opacidad>99) {
clearInterval(hilo);
document.getElementById(id).style.opacity="1";
document.getElementById(id).style.filter="alpha(opacity=100)";
return;
}
}

function hacerTransparente( id ) {
opacidad--;

opacidadFireFox=opacidad/100;

document.getElementById(id).style.opacity=opacidadFireFox;
document.getElementById(id).style.filter="alpha(opacity="+opacidad+")";

if (opacidad<1) {
clearInterval(hilo);
document.getElementById(id).style.opacity=".0";
document.getElementById(id).style.filter="alpha(opacity=0)";
return;
}
}

</script>

2 comentarios:

Ramzax200 dijo...

El problema que veo, y que en mi caso necesito resolver, es que manejas una sola variable para setInterval, por lo que si intentas hacer multiples transparencias al mismo tiempo, cortara el setInterval para todos, y no para cada una...

mugedoc dijo...

Te recomiendo uses un framework de javascript, antes yo solía tirar todas las líneas y crear toda la programación de javascript, y al final me encontraba con el típico problema de hacer compatible el código con todos los navegadores.

Pasate a mootools o prototype, hay que adaptarse un poco a ellos, pero los desarrollos y el mantenimiento del código se hace más sencillo.
mootools
prototype

Espero te sirva de ayuda, echa un vistazo a las demos de mootools, de lo que buscas hay una demo en MooTools Demos Effects-Classes