簡體   English   中英

setTimeout問題

[英]setTimeout issue

我正在嘗試在Javascript中創建一個jquery fadeto類型的效果,但是我的setTimeout命令出了問題。

這是代碼:

function textfade(y) {
    var x = document.getElementById("test");
    var y;           
    if (y == undefined) {
        y = 1.0;
    } 

    x.style.opacity = y;
    y -=0.1;
    setTimeout(function(){ textfade(y); }, 50);
}

問題是x.style.opacity = y

沒有它,超時運行正常。 然而,有了它,它會在函數中運行一次然后死掉。 雖然我覺得這是一個簡單的錯誤,但我沒有修復它的想法。

任何建議將不勝感激。

先感謝您。

每次執行textfade()時都會重新聲明y ,有效地破壞/重置傳遞的參數。

去掉:

var y; 

確保在test元素可用之后運行它。 這里工作正常: http//jsfiddle.net/3yDMP/ 在這里: http//jsfiddle.net/3yDMP/3/ - 不,因為函數是在head中調用的,而不是onload(就像在小提琴中一樣),當dom尚未准備好並且不可用時。

所以,在你的可能

<head>
  <script>
       function textfade() {...}
  </script>
</head>
<body onload="textfade()">
    <div id="test"> ... </div>

恕我直言這會更好,因為setTimeout調用一個內部閉包,其中當前不透明度級別保持在淡入淡出函數本身之外,因此您不必傳遞它。

function textfade(el) {
    if (typeof el === "string") {
        el = document.getElementById(el);
    }

    var opacity = 1.0;

    (function fade() {
        el.style.opacity = opacity;
        opacity -= 0.1;
        if (opacity > 0) {
             setTimeout(fade, 50);
        }
    })();
}

http://jsfiddle.net/alnitak/TQHYj/上的演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM