1

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.

それがなければ、タイムアウトは正常に実行されます。ただし、それを使用すると、関数を 1 回実行してから終了します。単純なエラーのように感じますが、修正するアイデアがありません。

アドバイスをいただければ幸いです。

前もって感謝します。

4

3 に答える 3

2

y実行されるたびに再宣言しtextfade()、渡されたパラメーターを効果的に破棄/リセットします。

削除する:

var y; 
于 2012-12-04T10:29:39.710 に答える
1

test要素がすでに利用可能になった後に実行していることを確認してください。ここでは問題なく動作します: http://jsfiddle.net/3yDMP/。そしてここ: http://jsfiddle.net/3yDMP/3/ - no 、dom がまだ準備されておらず、利用できない場合、関数は onload ではなく (最初のフィドルのように) ヘッドで呼び出されるためです。

だから、あなたの可能性で

<head>
  <script>
       function textfade() {...}
  </script>
</head>
<body onload="textfade()">
    <div id="test"> ... </div>
于 2012-12-04T10:36:08.590 に答える
0

私見では、これは、現在の不透明度レベルがフェード関数自体の外部で維持される内部クロージャを呼び出すとより良い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/のデモ

于 2012-12-04T10:29:34.890 に答える