2017-09-06 4 views
0

短くてシンプルに保つために: 他の場所をクリックするとハンバーガーメニューが閉じない。 jqueryで試してみましたが、removeClassなどで作成しようとしましたが、removeClassを使用しても機能しませんでした。hamburgermenu遠く離れてクリックするとチェックボックスがオフにならない

Here's the code: 
https://jsfiddle.net/dtgd551q/ 

チェックボックスをオフにするのが最も簡単な方法です。

私に助けを与えることができるすべての人に感謝します。

答えて

0

あなたはこれを行うことができます。

$(document).on('click', function(e){ 
 
if(e.target.type == "checkbox") 
 
    return; 
 
else{ 
 
    var elem = $('#menuToggle').find('input[type=checkbox]'); 
 
    if($(elem).prop('checked')){ 
 
     $(elem).trigger('click'); 
 
    } 
 
} 
 
});
body 
 
{ 
 
    overflow-x: hidden; 
 
    margin: 0; 
 
    padding: 0; 
 
    font-family: "Avenir Next", "Avenir", sans-serif; 
 
} 
 

 
a 
 
{ 
 
    text-decoration: none; 
 
    color: white; 
 
    transition: color 0.1s ease; 
 
} 
 

 
a:hover 
 
{ 
 
    color: black; 
 
} 
 
nav { 
 
\t display: inline-block; 
 
} 
 
#menuToggle 
 
{ 
 
    display: block; 
 
    position: relative; 
 
    top: 50px; 
 
    left: 50px; 
 
    
 
    z-index: 1; 
 
    
 
    -webkit-user-select: none; 
 
    user-select: none; 
 
} 
 

 
#menuToggle input 
 
{ 
 
    display: block; 
 
    width: 40px; 
 
    height: 32px; 
 
    position: absolute; 
 
    top: -7px; 
 
    left: -5px; 
 
    
 
    cursor: pointer; 
 
    
 
    opacity: 0; /* hide this */ 
 
    z-index: 2; /* and place it over the hamburger */ 
 
    
 
    -webkit-touch-callout: none; 
 
} 
 

 
/* 
 
* Just a quick hamburger 
 
*/ 
 
#menuToggle span 
 
{ 
 
    display: block; 
 
    width: 33px; 
 
    height: 4px; 
 
    margin-bottom: 5px; 
 
    position: relative; 
 
    
 
    background: black; 
 
    border-radius: 3px; 
 
    
 
    z-index: 1; 
 
    
 
    transform-origin: 4px 0px; 
 
    
 
    transition: transform 0.5s cubic-bezier(0.77,0.2,0.05,1.0), 
 
       background 0.5s cubic-bezier(0.77,0.2,0.05,1.0), 
 
       opacity 0.55s ease; 
 
} 
 

 
#menuToggle span:first-child 
 
{ 
 
    transform-origin: 0% 0%; 
 
} 
 

 
#menuToggle span:nth-last-child(2) 
 
{ 
 
    transform-origin: 0% 100%; 
 
} 
 

 
/* 
 
* Transform all the slices of hamburger 
 
* into a crossmark. 
 
*/ 
 
#menuToggle input:checked ~ span 
 
{ 
 
    opacity: 1; 
 
    transform: rotate(45deg) translate(-2px, -1px); 
 
    background: white 
 
} 
 

 
/* 
 
* But let's hide the middle one. 
 
*/ 
 
#menuToggle input:checked ~ span:nth-last-child(3) 
 
{ 
 
    opacity: 0; 
 
    transform: rotate(0deg) scale(0.2, 0.2); 
 
} 
 

 
/* 
 
* Ohyeah and the last one should go the other direction 
 
*/ 
 
#menuToggle input:checked ~ span:nth-last-child(2) 
 
{ 
 
    opacity: 1; 
 
    transform: rotate(-45deg) translate(0, -1px); 
 
} 
 

 
/* 
 
* Make this absolute positioned 
 
* at the top left of the screen 
 
*/ 
 
#menu 
 
{ 
 
    position: absolute; 
 
    width: 400px; 
 
    margin: -100px 0 0 -50px; 
 
    padding: 50px; 
 
    padding-top: 125px; 
 
    
 
    background: black; 
 
    list-style-type: none; 
 
    -webkit-font-smoothing: antialiased; 
 
    /* to stop flickering of text in safari */ 
 
    
 
    transform-origin: 0% 0%; 
 
    transform: translate(-100%, 0); 
 
    
 
    transition: transform 0.5s cubic-bezier(0.77,0.2,0.05,1.0); 
 
} 
 

 
#menu li 
 
{ 
 
    padding: 10px 0; 
 
    font-size: 22px; 
 
} 
 

 
/* 
 
* And let's fade it in from the left 
 
*/ 
 
#menuToggle input:checked ~ ul 
 
{ 
 
    transform: scale(1.0, 1.0); 
 
    opacity: 1; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<nav role="navigation"> 
 
    \t <div id="menuToggle"> 
 
    \t <input type="checkbox" /> 
 
    \t <span></span> 
 
    \t <span></span> 
 
    \t <span></span> 
 
    \t <ul id="menu"> 
 
     <a href="#"><li>Home</li></a> 
 
     <a href="#"><li>About</li></a> 
 
     <a href="#"><li>Info</li></a> 
 
     <a href="#"><li>Contact</li></a> 
 
     <a href="#"><li>Contact</li></a> 
 
     <a href="#"><li>Contact</li></a> 
 
     <a href="#"><li>Contact</li></a> 
 
     <a href="#"><li>Contact</li></a> 
 
     <a href="https://erikterwan.com/" target="_blank"><li>Show me more</li></a> 
 
    </ul> 
 
    </div> 
 
</nav>

あなたは既に働いているcheckbox上のクリックなどcheckbox除くページのどの部分をクリックして検出することができます。したがって、e.target.type == "checkbox"内のreturnコマンドは、クリックされた要素がチェックボックスではないことを確認します。今、それがチェックボックスでない場合は、メニューが既に開いているかどうかを確認してください。開いている場合は、$(elem).trigger('click');は、それを閉じるcheckboxのクリックを生成します。

関連する問題