2011-12-15 9 views
1

単純なhide/showメニューです。 リストアイテムをマウスオーバーすると、そのリストアイテムの子である順序付けられていないリストが表示されます。 CSSは、このサブリストを、リストされたリスト項目のすぐ右に置きます。 マウスオーバーすると、順序付けられていないリストが再び非表示になります。jQuery hover()hide/showによってバウンスが発生する

HTML:

<div class="menu-header-category-menu-container"> 
    <ul id="menu-header-category-menu" class="menu"> 
    <li id="menu-item-58"><a href="?cat=3">Parent Category I</a> 
     <ul class="sub-menu"> 
     <li id="menu-item-59"><a href="?cat=6">Child Category I</a></li> 
     <li id="menu-item-60"> 
      <a href="?cat=7">Child Category II</a> 
      <ul class="sub-menu"> 
      <li id="menu-item-61"><a href="?cat=9">Grandchild Category I</a></li> 
      </ul> 
     </li> 
     </ul> 
    </li> 
    <li id="menu-item-62"><a href="?cat=4">Parent Category II</a></li> 
    <li id="menu-item-63"> 
     <a href="?cat=5">Parent Category III</a> 
     <ul class="sub-menu"> 
     <li id="menu-item-64"><a href="?cat=8">Child Category III</a></li> 
     </ul> 
    </li> 
    <li id="menu-item-57"><a href="?cat=1">Uncategorized</a></li> 
    </ul> 
</div> 

CSS:

li { 
    width: 150px; 
    border: 1px solid black; 
    background-color: aqua; 
    list-style-type: none; 
    position: relative; 
} 

ul.sub-menu { 
    position: absolute; 
    left: 110px; 
    top: 0px; 
    display: none; 
} 

はJavaScript:

$(document).ready(function() { 
    $('li').hover(
     function() { $(this).children('ul').show('slow'); }, 
     function() { $(this).children('ul').hide('slow'); } 
    ); 
}); 

それは主にそれが必要のように動作します。あなたがリスト項目の上からマウスを移動し、サブリストが表示されるはずのスペースに残した場合(サブリストの表示が終了する前)は、表示/非表示/表示/非表示の繰り返しループで停止するまでマウスカーソルを離します。

mouseover引数の関数とmouseout引数の関数の両方で、setTimeout()を使用してこれを修正しようとしました。また、条件を使ってサブリストがそれらの引数に隠されているかどうかをチェックしようとしました。パフォーマンスの違いは見られません。

誰でも

+0

をバウンス複数避けることができますは、アンカーの代わりに、リスト項目にマウスオーバーハンドラをバインドしてください。私はそれが明らかになるだろうという気持ちがあります。 – lsuarez

+0

その中に論理を見ることができます(李にはサブメニューが含まれています)。アンカーからマウスを離すとサブメニューが消えます(サブメニューで何かをクリックする必要がある場合) –

+0

Derp。私が跳躍する前に見たので、それは確かに解決策ではありませんが、私は何とか問題の原因であると感じています。リストアイテム上でマウスオーバーすると、現在のレベルで表示されているサブメニューが非表示になり、表示されているサブメニューを非表示にするために最上位のulにマウスアウトが表示されます。 – lsuarez

答えて

1

これは共通の問題である、Hover Intent

+0

それは面白いです。私はHover Intentを使用していましたが、誤ってバグを引き起こすのは難しいですが、もしそうするつもりなら、私はそれを起こすことができます。それが私が生きていなければならないものなのかなと思います。 –

+0

私はもう少し働きましたが、タイムアウト引数を使用すると、複製することはほとんど不可能でした。私はこれでもう気にしないと確信しています。乾杯! –

0

は、私はそれがサブメニューを表示する前に、あなたのマウスアウトイベントをキャッチだと思います。表示/非表示の速度を高速に変更してみてください。しかし、これは解決策ではありません。

+0

ええ、それについての残念なことは外観の問題です。 –

0

をチェックしてください。このコードはまた、

var myVar; 
$(".liveUser").on({ 
     mouseenter: function() { 
     myVar = setTimeout(function(){ //optional delay 
      //$(".userDetail").stop().hide().fadeIn(); 
       $(".userDetail").stop().hide().show(); 
       }, 400); 
     }, 
     mouseleave: function() { 
      clearTimeout(myVar); 
      //$(".userDetail").stop().fadeOut(); 
      $(".userDetail").stop().hide(); 
     } 
    }); 
関連する問題