2011-12-07 12 views
2

を発行し、私は、ユーザーがジャンルを選択することができるようにクリックで、その下のドロップダウン・リストにフェードことは、このスタイルのリンクを持っています。jQueryの:フェードイン/フェードアウトタイミングは、私が管理していますサイトで

私は完全に動作していますが、私が実行している問題はドロップダウンリストが表示されていたかどうかを判断しようとしています。ドロップダウンリスト。

ドロップダウンリストがフェードインします。ユーザーはドロップダウン要素を入力せず、ドロップダウン要素を入力すると要素がフェードアウトします(クリックされたリンクからフェードイン)ドロップダウンは、ドロップダウン要素を離れるまで表示されたままになります。ここで

は、私が持っているコードは、これまでのところです:

$('#categories_link').live('click mouseleave', function(e){ 
    $('.categories').fadeIn(200, function(){ 
     $(this).live('mouseenter mouseleave', function(evnt){ 
      switch(evnt.type) { 
       case "mouseenter": 
        $(this).stop(true, true) 
        $(this).data('visible', true) 
       break; 

       case "mouseleave": 
        $(this).data('visible', false) 
       break; 
      } 
     }) 

     if(e.type == 'mouseleave') { 
      if($('.categories').data('visible')) 
       return; 
      else 
       $('.categories').fadeOut(200) 
     } 
    }) 
}) 
+0

あなたの説明が明確である(これはまた、純粋なCSSで動作します)とにかく消えませんので、巣は、親タグ内のドロップダウンです泥としておそらくそれのためのhttp://jsfiddle.netを作成します。 –

答えて

1

構造は非常に問題です。なぜあなたはマウスの休暇でリスナーを追加しますか?あなたができる

最善のことは

  • はsetTimeoutメソッドを使用して〜300-400ms遅延()フェードインするために、実際のドロップダウンを設定
  • でのMouseEnterにmouseleave上
  • セットフェードアウトを表示されるようにフェードインを設定していますそれ自体のMouseEnterに、(つまり、その前にストップを使用して:。これは、イベントハンドラ内で発生する前に)(真、真).fadeIn(200)を停止するが、(てclearTimeoutを使用
  • mouseleave
  • にフェードアウトするために、実際のドロップダウンを設定します

実際には、これらのアニメーションの前に停止(true、true)を使用する必要があります。

これは、ユーザーがドロップダウンの上に移動した場合、ドロップダウンがフェードインして、発生するようにキューイングされているフェードアウトをキャンセルすることになります(追加の200〜300秒のタイマーを追加しました)。

それを行うための別の方法あなたがドロップダウン内で推移しているが、それは

+1

'clearTimeout()' –

+0

に間違いがないことを忘れてしまった! –

+0

ありがとう@MihalisBagos - 私はこれを純粋なCSSメニューに切り替えました。私はあまりにも多くを追加しようとしていたと思う何かをCSSを扱うことができる単純な何かをovercomplicating :)助けてくれてありがとう! – dennismonsewicz

関連する問題