setTimeout no parece estar llamando a la función

El código funcionó muy bien hasta que agregué setTimeout. Ahora, no importa cómo intente llamar a las funciones en setTimeout ( setTimeout(function(){fadeOut()},1000); setTimeout("fadeOut()",1000); etc.) no parece llegar a la función en absoluto.

Soy un novato de Javascript, por lo que se agradece cualquier ayuda =]

código javascript:

var slideArray = ["slide1","slide2","slide3","slide4","slide5","slide6"];
var currentSlide = null;
var current = null;
var done = false;

function fade(newSlide)
{
    if(currentSlide === null)
    {
        currentSlide = slideArray[0];
        document.getElementById(currentSlide).style.opacity = 1.0;

        for(var i=1;i<slideArray.length;i++)
            document.getElementById(slideArray[i]).style.opacity = 0.0;
    }

    current = document.getElementById(currentSlide);
    done = false;
    do
    {
        window.setTimeout(fadeOut,1000);
    } while(done == false);

    currentSlide = newSlide;
    current = document.getElementById(currentSlide);
    done = false;

    do
    {
        window.setTimeout(fadeIn,1000);
    } while(done == false);
}

function fadeOut()
{
    if(parseFloat(current.style.opacity)-0.1>.0000001)
    {
    current.style.opacity = parseFloat(current.style.opacity) -0.1;
        done = false;
    }
    else
    {
        current.style.opacity = 0.0;
        done = true;
    }
}

function fadeIn()
{
    if(0.9-parseFloat(current.style.opacity)>.0000001)
    {
        current.style.opacity = parseFloat(current.style.opacity)+0.1;
        done = false;
    }
    else
    {
        current.style.opacity = 1.0;
        done = true;
    }
}

preguntado el 27 de julio de 12 a las 23:07

Probablemente esté configurando con éxito varios millones de controladores de tiempo de espera. -

No hay errores de sintaxis o mensajes de error registrados en la consola, ¿verdad? -

asegúrese de que cuando lo llame, las funciones estén definidas y estoy de acuerdo con @Pointy -

No creo que la función se active nunca porque está atascada dentro de ese ciclo do while esperando para siempre. Puede crear el controlador, pero nunca recibir la respuesta porque está en ese ciclo. -

El código solo declara algunas variables y algunas funciones, pero no usa ninguna de ellas para nada, así que si el código no hace nada, eso es exactamente lo que se espera que haga. -

2 Respuestas

No puedes usar esta estructura:

do
{
    window.setTimeout(fadeIn,1000);
} while(done == false);

Porque el código en el setTimeout() se ejecuta en algún momento DESPUÉS, su valor de hecho NUNCA se cambiará y este ciclo se ejecutará para siempre. Y, mientras funcione, el setTimeout() nunca llega a disparar tampoco (porque javascript es de un solo subproceso).

En su lugar, lo que debe hacer es lanzar el siguiente setTimeout(fadeIn, 1000) from the fadeIn() función si no ha terminado.

function fadeOut()
{
    if(parseFloat(current.style.opacity)-0.1>.0000001)
    {
        current.style.opacity = parseFloat(current.style.opacity) -0.1;
        setTimeout(fadeOut, 1000);
    }

    else
    {
        current.style.opacity = 0.0;
    }
}

Respondido 28 Jul 12, 00:07

Recuerde que javascript es de subproceso único, por lo que sus funciones setTimeout'et no se llamarán hasta que termine de ejecutar el script actual. Lo que nunca sucederá ya que estás en un ciclo que nunca terminará (hasta que te quedes sin memoria de todos esos setTimeout). Simplemente llame a setTimeout una vez y deje que la función regrese. Y olvídate de la idea de esperar a que suceda.

Respondido 28 Jul 12, 00:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.