2012-07-27 87 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