2012-03-29 31 views
0

私はこのistuationを持っています。私は、フェードアウトして要素をフェードインさせる関数にsetTimeoutを持っています。数秒でcleartimeoutでこのタイムアウトをクリアし、その直後に.hide()を呼び出してこの要素を非表示にします。問題は時には要素を隠さないということです。私はタイミングと関係があると感じています。cleartimeout関数が終了した後に実行します(jQuery)

例:

function first_func(){ 
    $('.element').fadeOut(function(){ 
     // Do other stuff like change element's position 
     $('.element').fadeIn(); 
    }); 

    interval1 = setTimeout(function(){first_func()},500);   
} 

function second_func(){ 
    countdown--; 
    if (countdown<0){ 
     last_func(); 
    } 
    interval2 = setTimeout(function(){second_func()},1000);   
} 

function begin_func(){ 
    first_func(); 
    second_func(); 
} 

function last_func(){ 
    clearTimeout(interval1); 
    clearTimeout(interval2); 
    $('.element').hide(); 
} 

だから基本的に問題はlast_funcに私は両方の間隔をクリアして、要素を非表示にすることであるが、時には要素がページに表示されたままです。だから私はそれを隠すんが、間隔がまだ進行中であり、それが戻ってフェードインすることを推測しています。

、誰もがいくつか提案してくださいあなたはlast_func呼び出すことがないように見える

答えて

2

だけの提案が、このビットは私に間違って表示されます:

function second_func(){ 
    countdown--; 
    if (countdown<0){ 
     end_func(); 
    } 
    interval2 = setTimeout(function(){second_func()},1000);   
} 

あなたはすべてを停止する)(end_func呼んでいる場合でも、あなたはその後、新たなタイムアウトを設定しています。

function second_func(){ 
    countdown--; 
    if (countdown<0){ 
     end_func(); 
    } else { 
     interval2 = setTimeout(second_func, 1000); 
    }  
} 

もう一つのヒント:実行中のフェードイン/ fadeOutsは、要素の隠ぺいに影響を与え、あなたはアニメーションキューをクリアする必要があることを避けるために:

$('.element').stop(true, true).hide(); 
+0

申し訳ありませんが、私は頭から書いています。もちろん、end_func()を呼び出した後。私は帰ります。同じように。基本的にはすべてがうまくいっていますが、要素が隠されていない場合があります。 – Tom

+0

@Tom okですが、hideを呼び出す前に 'stop(true、true)'を追加することをお勧めします。 – Niko

+0

私はあなたに実際のコードを示すのが最善であると思っています。あなたはwww.tomasdostal.com/projects/thirst_gameでそれを見ることができます。しかし、コードは非常に乱雑です – Tom

0

を持っている希望の場合、end_func()はずがためにありますlast_func()?

これは動作します:アニメーションが自動的にjQueryにキューイングされているので、これは動作しますhttp://jsfiddle.net/fSEjR/2/

var countdown = 3, 
    $element = $('.element'); 

for (var i = 0; i < countdown; i++) { 
    $element.fadeOut().fadeIn(function() { 
     countdown--; 
     if (countdown === 0) $element.hide(); 
    }); 
}; 

http://jsfiddle.net/CZ9hr/1/

は、私はあなたが達成したいように見える何のために簡単な方法を提案することができます。

+0

あなた自身www.tomasdostal.com/projects/thirst_gameを確認することができます場合によっては要素が隠されない場合があります – Tom

0

デフォルトでは、fadeInとfadeOutの使用時間は400ミリ秒です。最初のパラメータを設定することで変更できます。

$('.element').fadeOut([duration] [, callback]); 
+0

これは単なる例ですが、私のスクリプトでは持続時間が50に設定されています – Tom

関連する問題