2016-07-06 34 views
0

このplunkには、キャンバスをクリックすると表示されるメニューがあります。 「集計」メニュー項目にカーソルを置くと、右に2番目のサブメニューが表示されます。コンテキストメニューにサブメニューが表示されない

「集計」から「マウスを外して」もう一度入力すると、サブメニューの位置がもはや存在しなくなるという問題があります。このコードで何が問題になっていますか?

HTML

<div id="canvas" style="width:400px;height:400px;background-color:#ff33ff;"></div> 

    <div id="menu1" class="context-menu"> 
     <ul> 
     <li> 
      <a href="javascript:void(0);">Display</a> 
     </li> 
     <li id="li1"> 
      <a href="javascript:void(0);">Aggregate</a> 
     </li> 
     <li id="li2"> 
      <a href="javascript:void(0);">Order by</a> 
     </li> 
     <li> 
      <a href="javascript:void(0);">Group by</a> 
     </li> 
     </ul> 
    </div> 

    <div id="menu2" class="context-menu"> 
     <ul> 
     <li> 
      <a href="javascript:void(0);">Count</a> 
     </li> 
     <li> 
      <a href="javascript:void(0);">Sum</a> 
     </li> 
     <li> 
      <a href="javascript:void(0);">Average</a> 
     </li> 
     </ul> 
    </div> 

Javascriptを

$('#canvas').click(function(e) { 

    var top = e.pageY; 
    var left = e.pageX; 

    $("#menu1").show(); 
    $("#menu1").offset({ top: top, left: left }); 

    $('#li1').mouseenter(function() { 
      $("#menu2").offset({ top: top+20, left: left+120 }); 
      $("#menu2").show(); 
    }); 

    $('#li1').mouseleave(function() { 
     $("#menu2").hide(); 
    }); 

    $('#menu2').mouseenter(function() { 
      $("#menu2").show(); 
    }); 

    $('#menu2').mouseleave(function() { 
      $("#menu2").hide(); 
    }); 

}); 

CSS

.context-menu { 
    border:1px solid rgba(0,0,0,.15); 
    background-color:#ffffff; 
    padding:6px 0 0 0; 
    display:none; 
} 
.context-menu ul { 
    padding:0; 
    list-style:none; 
} 
.context-menu li { 
    background-color:#ffffff; 
} 
.context-menu li:hover { 
    background-color:rgb(248,248,248); 
} 
.context-menu a { 
    color:#333; 
    text-decoration: none; 
    line-height:24px; 
    margin-left:20px; 
} 
#menu1{ 
    position:absolute; 
    width:140px; 
} 
#menu2{ 
    position:absolute; 
    width:100px; 
} 
+0

あなたがしようとしていることの多くは、CSSで実現できます。ホバー状態(マウス[enter | leave])にJSを使用する必要はありません。完璧な例ではありませんが、私は[簡単な例](http://plnkr.co/edit/NrJ9P46R0YajtdEquFrj?p=preview)でした。 – hungerstar

+0

ありがとう、私はあなたのアイデアを実装し終わった。 – ps0604

答えて

3

cssoffsetを交換してみてください。

offsetmouseenterで呼び出されるたびに、そのメニューの現在の位置に追加されると思います。 css方法を使用

上部と左位置を設定する代わりに、現在の位置に追加します。

1

入力し、各マウスで実行することを避けるためにmouseenter機能外置き、この行$("#menu2").offset({ top: top+20, left: left+120 });を。

$('#li1').mouseenter(function() { 
    //$("#menu2").offset({ top: top+20, left: left+120 }); 
    $("#menu2").show(); 
}); 

$("#menu2").offset({ top: top+20, left: left+120 }); 

Fiddle

+0

ありがとう、しかし、私は再びキャンバスをクリックし、メニューの位置を変更するサブメニューが正しく表示されません – ps0604

+0

私は知っている...それに取り組んでいた...しかし、他の答えはあなたの解決策です。 )私は@Mrをupvoted。 Meeseeks ... –

関連する問題