2017-04-30 5 views
0

この作業用バージョンのナビゲーションは、画面の右側から開きます。閉じるボタンをクリックすると閉じます。クローズボタンだけでなく、クリックしたときにナビゲーションバーを閉じる

ナビゲーションバーの外をクリックして閉じるボタンXに制限するだけで終了したいと思いますが、どうすればいいですか?

function openNav() { 
 
    document.getElementById("mySidenav").style.width = "250px"; 
 
} 
 

 
function closeNav() { 
 
    document.getElementById("mySidenav").style.width = "0"; 
 
}
.sidenav { 
 
    height: 100%; 
 
    width: 0; 
 
    position: fixed; 
 
    z-index: 1; 
 
    top: 0; 
 
    right: 0; 
 
    background-color: #111; 
 
    overflow-x: hidden; 
 
    transition: 0.5s; 
 
    padding-top: 60px; 
 
} 
 

 
.sidenav a { 
 
    padding: 8px 8px 8px 32px; 
 
    text-decoration: none; 
 
    font-size: 25px; 
 
    color: #818181; 
 
    display: block; 
 
    transition: 0.3s; 
 
} 
 

 
.sidenav a:hover, .offcanvas a:focus{ 
 
    color: #f1f1f1; 
 
} 
 

 
.sidenav .closebtn { 
 
    position: absolute; 
 
    top: 0; 
 
    right: 25px; 
 
    font-size: 36px; 
 
    margin-left: 50px; 
 
} 
 

 
@media screen and (max-height: 450px) { 
 
    .sidenav {padding-top: 15px;} 
 
    .sidenav a {font-size: 18px;} 
 
}
<div id="mySidenav" class="sidenav"> 
 
    <a href="javascript:void(0)" class="closebtn" onclick="closeNav()">&times;</a> 
 
    <a href="#">About</a> 
 
    <a href="#">Services</a> 
 
    <a href="#">Clients</a> 
 
    <a href="#">Contact</a> 
 
</div> 
 

 
<h2>Animated Sidenav Example</h2> 
 
<p>Click on the element below to open the side navigation menu.</p> 
 
<span style="font-size:30px;cursor:pointer" onclick="openNav()">&#9776; open</span>

+0

はjQueryのを使用するのではなく、万が一あなたは試します? –

答えて

1

使用しない場合は、この

function openNav() { 
 
    document.getElementById("mySidenav").style.width = "250px"; 
 
} 
 

 
function closeNav() { 
 
    document.getElementById("mySidenav").style.width = "0"; 
 
} 
 

 
$('body').on('click', function(){ 
 
    if(parseInt($('#mySidenav').css('width')) > 0){ 
 
    closeNav(); 
 
    } 
 
});
.sidenav { 
 
    height: 100%; 
 
    width: 0; 
 
    position: fixed; 
 
    z-index: 1; 
 
    top: 0; 
 
    right: 0; 
 
    background-color: #111; 
 
    overflow-x: hidden; 
 
    transition: 0.5s; 
 
    padding-top: 60px; 
 
} 
 

 
.sidenav a { 
 
    padding: 8px 8px 8px 32px; 
 
    text-decoration: none; 
 
    font-size: 25px; 
 
    color: #818181; 
 
    display: block; 
 
    transition: 0.3s; 
 
} 
 

 
.sidenav a:hover, .offcanvas a:focus{ 
 
    color: #f1f1f1; 
 
} 
 

 
.sidenav .closebtn { 
 
    position: absolute; 
 
    top: 0; 
 
    right: 25px; 
 
    font-size: 36px; 
 
    margin-left: 50px; 
 
} 
 

 
@media screen and (max-height: 450px) { 
 
    .sidenav {padding-top: 15px;} 
 
    .sidenav a {font-size: 18px;} 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="mySidenav" class="sidenav"> 
 
    <a href="javascript:void(0)" class="closebtn" onclick="closeNav()">&times;</a> 
 
    <a href="#">About</a> 
 
    <a href="#">Services</a> 
 
    <a href="#">Clients</a> 
 
    <a href="#">Contact</a> 
 
</div> 
 

 
<h2>Animated Sidenav Example</h2> 
 
<p>Click on the element below to open the side navigation menu.</p> 
 
<span style="font-size:30px;cursor:pointer" onclick="openNav()">&#9776; open</span>

+0

どのようにモバイルタッチ画面でもこの作品を作るためのアイデア? –

0

ユーザーはメニューが閉じどこかをクリックので、もしあなたは、ウィンドウにclickイベントリスナーを追加することができます。あなたは、ユーザーがメニュー内の項目をクリックした場合、それは閉じたい

event.stopPropagation() 

function openNav() { 
    document.getElementById("mySidenav").style.width = "250px"; 

    window.addEventListener(
     "click", 
     closeNav 
    ); 
} 

function closeNav() { 
    document.getElementById("mySidenav").style.width = "0"; 
    window.removeEventListener("click", closeNav); 
} 
+0

どうすればいいですか?あなたは現在のコードと統合することができますか? –

+0

私は自分の答えを編集しました。これはあなたが望むことをしますか? – afdggfh

+1

私は代わりの方法を模索することを検討するでしょう。それが「うまくいく」かもしれませんが、確かにいくつかの複雑さが考慮されています。詳細については、以下を参照してください。https://css-tricks.com/dangers-stopping-event-propagation/ –

関連する問題