2017-08-21 11 views
2

私のコードでは、<image><navigation>からなる<header>を作成しました。すべてこれまで完全に動作します。あなたがそれを置く一度ホバーしたときにサブメニューがランダムに反転する

は今、1.0 Main MenuSub-MenuそのSlideDownで構成されています。

何とかSub-Menuは背中と力ひっくり返す続けこのSlideDown機能は、すべての今して任意の問題なく動作しますが、ほとんどの時間。これは、主に1. Main Menuにマウスを移動し、1.3 Menuにすぐに移動すると発生します。

いつも起こるわけではないので、この動作を説明するのは非常に難しいですが、私のコードで見ることができれば幸いです。

私のコードhereもあります。

Sub-Menuのこのランダムなフリップを避けるために、コード内で何を変更する必要がありますか?

$(document).ready(function() { 
 
    $(".button").mouseenter(function() { 
 
    $(this).children(".SlideItem").slideDown(500); 
 
    }); 
 
    $(".button").mouseleave(function() { 
 
    $(this).children(".SlideItem").slideUp(500); 
 
    }); 
 
});
body { 
 
margin: 0; 
 
} 
 

 
.header { 
 
width: 80%; 
 
height: 10%; 
 
margin-left: 10%; 
 
display: flex; 
 
justify-content: space-between; 
 
position: fixed; 
 
top: 0; 
 
box-sizing: border-box; 
 
border-style: solid; 
 
border-width: 1px; 
 
background-color: yellow; 
 
} 
 

 
.image { 
 
width: 30%; 
 
height: 100%; 
 
display: flex; 
 
justify-content: center; 
 
text-align:center; 
 
align-items: center; 
 
box-sizing: border-box; 
 
border-style: solid; 
 
border-width: 1px; 
 
background-color: green; 
 
} 
 

 
.navigation { 
 
width: 70%; 
 
height: 100%; 
 
box-sizing: border-box; 
 
border-style: solid; 
 
border-width: 1px; 
 
} 
 

 
.navigation > ul { 
 
height: 100%; 
 
display: flex; 
 
list-style: none; 
 
margin: 0; 
 
padding: 0; 
 
box-sizing: border-box; 
 
border-style: solid; 
 
border-width: 1px; 
 
background-color: blue; 
 
} 
 

 
.navigation > ul > li { 
 
width: 100%; 
 
display: flex; 
 
justify-content: center; 
 
text-align:center; 
 
align-items: center; 
 
box-sizing: border-box; 
 
border-style: solid; 
 
border-width: 1px; 
 
} 
 

 
.content{ 
 
width: 80%; 
 
margin-top: 10%; 
 
margin-left: 10%; 
 
box-sizing: border-box; 
 
border-style: solid; 
 
border-width: 1px; 
 
background-color: red; 
 
} 
 

 
.SlideItem { 
 
display: none; 
 
} 
 

 
.button { 
 
position: relative; 
 
} 
 

 
.SlideItem { 
 
    width: 100%; 
 
    position:absolute; 
 
    top:100%; 
 
    left:0; 
 
    padding:0; 
 
    margin:0; 
 
    box-sizing: border-box; 
 
    border-style: solid; 
 
    border-width: 1px; 
 
    background-color: lime; 
 
} 
 

 
.SlideItem li { 
 
    display:block; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<div class="header"> \t 
 

 
     <div class="image"> 
 
     Image 
 
     </div> 
 
    
 
     <nav class="navigation"> 
 
     <ul> 
 
      <li class="button"> 1.0 Main Menu 
 
      <ul class="SlideItem"> 
 
       <li> 1.1 Sub Menu </li> 
 
       <li> 1.2 Sub Menu </li> 
 
       <li> 1.3 Sub Menu </li>  
 
      </ul> 
 
      </li> 
 
      <li> 2.0 Main Menu </li> 
 
      <li> 3.0 Main Menu </li> 
 
     </ul> 
 
     </nav> 
 
     
 
</div>

+0

私はあなたのslideDownとslideUpの速度はマウスで追従できないので、それはだと思います。だから、もしあなたが1.0メインメニューの上でマウスを何度もすばやく動かせば、なぜそれが上下にスライドしているのか。 – RasmusGlenvig

+0

通常、このようなメニューに使用される「標準」速度のようなものがありますか? – Michi

+0

@RasmusGlenvigのようなslideDownの動作はこう言っています。 –

答えて

0

シンプルなドロップダウンのためのjsの必要はありません、あなただけの純粋なCSSでそれを作ることができます。

body { 
 
    margin: 0; 
 
} 
 

 
.header { 
 
    width: 80%; 
 
    height: 10%; 
 
    margin-left: 10%; 
 
    display: flex; 
 
    justify-content: space-between; 
 
    position: fixed; 
 
    top: 0; 
 
    box-sizing: border-box; 
 
    border-style: solid; 
 
    border-width: 1px; 
 
    background-color: yellow; 
 
} 
 

 
.image { 
 
    width: 30%; 
 
    height: 100%; 
 
    display: flex; 
 
    justify-content: center; 
 
    text-align: center; 
 
    align-items: center; 
 
    box-sizing: border-box; 
 
    border-style: solid; 
 
    border-width: 1px; 
 
    background-color: green; 
 
} 
 

 
.navigation { 
 
    width: 70%; 
 
    height: 100%; 
 
    box-sizing: border-box; 
 
    border-style: solid; 
 
    border-width: 1px; 
 
} 
 

 
.navigation>ul { 
 
    height: 100%; 
 
    display: flex; 
 
    list-style: none; 
 
    margin: 0; 
 
    padding: 0; 
 
    box-sizing: border-box; 
 
    border-style: solid; 
 
    border-width: 1px; 
 
    background-color: blue; 
 
} 
 

 
.navigation>ul>li { 
 
    width: 100%; 
 
    display: flex; 
 
    justify-content: center; 
 
    text-align: center; 
 
    align-items: center; 
 
    box-sizing: border-box; 
 
    border-style: solid; 
 
    border-width: 1px; 
 
} 
 

 
.content { 
 
    width: 80%; 
 
    margin-top: 10%; 
 
    margin-left: 10%; 
 
    box-sizing: border-box; 
 
    border-style: solid; 
 
    border-width: 1px; 
 
    background-color: red; 
 
} 
 

 
.button { 
 
    position: relative; 
 
} 
 

 
.SlideItem { 
 
    width: 100%; 
 
    position: absolute; 
 
    top: 100%; 
 
    left: 0; 
 
    padding: 0; 
 
    margin: 0; 
 
    box-sizing: border-box; 
 
    border-style: solid; 
 
    border-width: 1px; 
 
    background-color: lime; 
 
    max-height:0px; 
 
    overflow:hidden; 
 
    transition: max-height .5s linear; 
 
} 
 

 
.button:hover .SlideItem { 
 
    max-height: 100px; 
 
} 
 

 
.SlideItem li { 
 
    display: block; 
 
}
<div class="header"> 
 
    <div class="image">Image</div> 
 
    <nav class="navigation"> 
 
    <ul> 
 
     <li class="button"> 1.0 Main Menu 
 
     <ul class="SlideItem"> 
 
      <li> 1.1 Sub Menu </li> 
 
      <li> 1.2 Sub Menu </li> 
 
      <li> 1.3 Sub Menu </li> 
 
     </ul> 
 
     </li> 
 
     <li> 2.0 Main Menu </li> 
 
     <li> 3.0 Main Menu </li> 
 
    </ul> 
 
    </nav> 
 
</div> 
 
<div class="content"></div>

+0

こんにちはAbhishek、ありがとう、この素晴らしいコードです。 CSSのアニメーションをjQueryのアニメーションと同じようにする方法もありますか?今はわずかに異なるアニメーションになっていますか? – Michi

+0

@Michi私は自分の答えを更新しました。一度だけチェックしてください、私は 'transition'に' max-height'を使っています –

+0

こんにちはAbhishek、あなたのすべての努力に感謝します。あなたの最初のコードを使用して私のメニューをさらに開発しました(私はさらにサブメニューを追加しました)。ここで完璧な結果が得られました:https://jsfiddle.net/vu0hnqab/37/あなたの改訂コードをtransition max-height私はここで追加のサブメニューのスライド作業を行うことができませんでした:https://jsfiddle.net/vu0hnqab/39/これはもうこの質問の一部ではありませんので、私はあなたにこれを手伝いたいと思っています同じように。とにかく正しい答えをあなたにお届けします。 – Michi

関連する問題