setTimeout没有'似乎没有调用函数

setTimeout doesn't seem to be calling the function

本文关键字:调用 函数 没有 setTimeout      更新时间:2024-04-15

在添加setTimeout之前,代码运行良好。现在,无论我如何尝试调用setTimeout中的函数(setTimeout(function(){fadeOut()},1000);setTimeout("fadeOut()",1000);等),它似乎都根本无法访问该函数。

我是一个Javascript新手,所以我们非常感谢您的任何帮助=]

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;
    }
}

您不能使用以下结构:

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

因为setTimeout()中的代码在以后的某个时间运行,所以done的值永远不会更改,这个循环将永远运行。而且,只要它运行,setTimeout()就永远不会启动(因为javascript是单线程的)。

相反,如果没有完成,您应该从fadeIn()函数中启动下一个setTimeout(fadeIn, 1000)

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;
    }
}

请记住,javascript是单线程的,因此在运行完当前脚本之前,不会调用setTimeout’et函数。这永远不会发生,因为你处于一个永远不会结束的循环中(直到你从所有的setTimeout中耗尽内存)。只需调用setTimeout一次,然后让函数返回即可。忘记等待它发生的想法。