2012-07-27 58 views
0

代码工作得很好,直到我添加setTimeout。现在,无论我如何尝试调用setTimeout中的函数(如setTimeout(function(){fadeOut()},1000);setTimeout("fadeOut()",1000);等),它似乎都没有进入函数。setTimeout似乎没有调用函数

我是一个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; 
    } 
} 
+4

您可能已成功设置了数百万个超时处理程序。 – Pointy 2012-07-27 23:01:45

+0

控制台中没有记录任何语法错误或错误消息吗? – mellamokb 2012-07-27 23:01:51

+0

请确保当你调用它的功能被定义,并且我同意@Pointy – 2012-07-27 23:03:06

回答

0

记住,JavaScript是单线程的,所以你的setTimeout'et功能将不可直到它完成运行当前脚本。这是永远不会发生的,因为你在一个永远不会结束的循环中(直到你从所有这些setTimeout中忘记了)。只需调用一次setTimeout并让函数返回。并忘记等待它发生的想法。

3

不能使用这样的结构:

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

因为在setTimeout()运行的代码晚些时候,你的做值将不会被改变,这个循环将永远运行下去。而且,只要它运行,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; 
    } 
} 
+0

谢谢!我会给这一击:) – ashley3 2012-07-28 01:44:08