1

クリアアニメーションは機能し、ディスプレイアニメーションは機能しますが、一方を実行しようとすると、すべてのプログラミングがヌルになるようです。私が見ていなかった単純な議論があると確信しています。

var opac = null;

var removeGif = document.getElementById('splash');
function dissappear (elem, speed) {
    if (opac) clearTimeout(opac);
    if ( !elem.style.opacity ) {
        elem.style.opacity = 1;
    }
    setTimeout(function() {
        setInterval(function() {
        elem.style.opacity -= 1;
        }, speed / 50);
    },10);
}
dissappear(removeGif, 250000);

var folio = document.getElementById('content');
function appear (elem, speed) {
    if (opac) clearTimeout(opac);
    if ( !elem.style.opacity ) {
        elem.style.opacity = 0;
    }
    setTimeout(function() {
        setInterval(function() {
        elem.style.opacity += 1;
        }, speed / 50);
    },10);
}
appear(removeGif, 250000);

誰かが問題を見ることができるならば、私に知らせてください。

4

2 に答える 2

0

問題になる可能性のあることがいくつかあります。

  1. setTimeoutの結果をに割り当てることは決してないopacので、opac常にになりますnull

    opac = setTimeout(function() {
               ...
           });
    
  2. ではappear()、このコードブロックは私には意味がありません。

    if ( !elem.style.opacity ) {
        elem.style.opacity = 0;
    }
    

    elem.style.opacitynullにすることができますか?もしそうなら、それは大丈夫です。!elem.style.opacity不透明度がの場合もtrueになる0ため、不透明度を0にリセットする必要はありません。

    要素がすでに表示されているかどうかを確認してから、最初に非表示にするのではなく、関数から抜け出しませんか?

  3. Ianが言ったように、不透明度の値は、パーセンテージ値ではなく、10進値として0から1の範囲です。インクリメントとデクリメントを0.1のようなものに変更することを検討してください。

  4. setInterval()関数の実行が停止することはありません。対応するがありませんclearInterval()。また、いつ呼び出すかを知るために不透明度が0または1であることを確認することもありませんclearInterval()

単純なフェードイン/フェードアウトの実装には、は必要ありませんsetTimeout。実用的な例は次のようになります

于 2012-11-02T18:58:18.567 に答える
0

私のコードをそれほど遠回りにしないようにするためにあなたの入力に感謝します。これが私が最終的に作成したコードです。

window.setTimeout(function toggle () {
    var spl = document.getElementById('splash');
    var cnt = document.getElementById('content');
        spl.style.display = "none";
        cnt.style.display = "block";
}, 25000);

今ではすべてがとてもシンプルに見えます!

于 2012-11-05T15:53:18.520 に答える