2013-03-04 74 views
-2
function fade90() { document.getElementById("myDiv").style.opacity="0.90"; setTimeout("fade80()", 100); } 
function fade80() { document.getElementById("myDiv").style.opacity="0.80"; setTimeout("fade70()", 100); } 
function fade70() { document.getElementById("myDiv").style.opacity="0.70"; setTimeout("fade60()", 100); } 
function fade60() { document.getElementById("myDiv").style.opacity="0.60"; setTimeout("fade50()", 100); } 
function fade50() { document.getElementById("myDiv").style.opacity="0.50"; setTimeout("fade40()", 100); } 
function fade40() { document.getElementById("myDiv").style.opacity="0.40"; setTimeout("fade30()", 100); } 
function fade30() { document.getElementById("myDiv").style.opacity="0.30"; setTimeout("fade20()", 100); } 
function fade20() { document.getElementById("myDiv").style.opacity="0.20"; setTimeout("fade10()", 100); } 
function fade10() { document.getElementById("myDiv").style.opacity="0.10"; setTimeout("hide()", 100); } 

我寫這個。它是否正確?如果沒有請解決這個問題。我想爲後續的js代碼創建一個for循環。請幫我

function cls_msg(){ 
for (i=1;i<10;i++) 
{ 
setTimeout(document.getElementById("myDiv").style.opacity=100-(i*10), 100); 
} 

感謝

+1

爲什麼你再次發佈相同的問題? – 2013-03-04 20:54:34

回答

1

你可能想這樣的:

var elem = document.getElementById("myDiv"); 
for (i=1;i<10;i++) { 
    (function(i){ 
     setTimeout(
     function(){elem.style.opacity=100-(i*10)}, 
     (i+1)*100 
    ); 
    })(i); 
} 

差異與您的代碼:

  • 超時是不同的,這樣他們不叫所有在同一時間(代碼不會暫停,直到執行下一個超時)
  • i通過封閉保護,使得它不具有循環結束的值時,超時被解僱
  • 傳遞給setTimeout第一個參數是一個函數
  • 作爲suggered由yabol,元素被緩存
+2

將'document.getElementById(「myDiv」)'保存在變量的循環外部,性能會更好。當然,只有#myDiv元素不會改變。 – 2013-03-04 20:30:52

+0

@yabol是的,那會更好。表演並不重要('getElementById'非常快),但這顯然是一個好習慣。 – 2013-03-04 20:32:34

+0

是的,我知道它很快,但如果作者想要更改元素選擇更費時;) – 2013-03-04 20:34:25