発生している問題
サイドメニューとしてヘッダー内にドロワーメニューを作っています。
クリックで要素の開閉までは正常に動きますが、
要素が開いている状態で要素外をクリックした時に要素を閉じる、と言う動作を実現できずにいます。
###実現したいこと
・表示状態の要素外をクリックした時に要素が閉じるようにしたい。そのための記述方を知りたいです。
該当のソースコード
js
1//header: drawer 2$(function(){ 3 var $dropdown = $('.is-adminBar__drawerNavBtn'); 4 var DURATION = 200; 5 function fadeOutMenu(){ 6 $dropdown.removeClass('is-active') 7 .next('.adminBar__drawerNav') 8 .stop() 9 .slideUp(DURATION); 10 } 11 function toggleMenu(){ 12 var $self = $(this); 13 if(!$self.hasClass('is-active')){ 14 fadeOutMenu(); 15 } 16 $self.toggleClass('is-active') 17 .next('.adminBar__drawerNav') 18 .stop().slideToggle(DURATION); 19 } 20 $dropdown.on('click', toggleMenu); 21//要素外クリックで閉じる処理をしたい↓↓↓ 22 $(document).on('click touchend', function(event) { 23 if (!$(event.target).closest('body').length) { 24 fadeOutMenu(); 25 } 26 }); 27});
HTML
1<body> 2<header> 3〜略〜 4<ul class="adminBar__secondary modFlexBox--oneHalf modFlexBox"> 5 <li class="adminBar__secondary__item"> 6 <button type="button" class="is-adminBar__drawerNavBtn"><img src="./images/common/icon_ad-item.svg" alt="" class="is-adminBar__drawerNavBtn__iconSVG"></button> 7 <ul class="adminBar__drawerNav"> 8 <li class="adminBar__drawerNav__item"><a href="#" class="adminBar__drawerNav__item__link">コンテンツ作成</a></li> 9 <li class="adminBar__drawerNav__item"><a href="#" class="adminBar__drawerNav__item__link">アカウント申請</a></li> 10 <li class="adminBar__drawerNav__item"><a href="#" class="adminBar__drawerNav__item__link">ほにゃら申請</a></li> 11 <li class="adminBar__drawerNav__item"><a href="#" class="adminBar__drawerNav__item__link">ほにゃら申請</a></li> 12 </ul> 13 </li> 14 <li class="adminBar__secondary__item"> 15 <button type="button" class="is-adminBar__drawerNavBtn"><img src="./images/common/icon_help.svg" alt="" class="is-adminBar__drawerNavBtn__iconSVG"></button> 16 <ul class="adminBar__drawerNav"> 17 <li class="adminBar__drawerNav__item"><a href="#" class="adminBar__drawerNav__item__link">デモサイト</a></li> 18 <li class="adminBar__drawerNav__item"><a href="#" class="adminBar__drawerNav__item__link">マニュアル</a></li> 19 </ul> 20 </li> 21 <li class="adminBar__secondary__item"> 22 <button type="button" class="is-adminBar__drawerNavBtn"><img src="./images/common/icon_user.svg" alt="" class="is-adminBar__drawerNavBtn__iconSVG"></button> 23 <ul class="adminBar__drawerNav"> 24 <li class="adminBar__drawerNav__item adminBar__drawerNav__item--userName modFlexBox"><span class="adminBar__drawerNav__item--userName__item">じゅげむじゅげむごこうのすりきれ</span></li> 25 <li class="adminBar__drawerNav__item"><a href="#" class="adminBar__drawerNav__item__link">マイページ</a></li> 26 <li class="adminBar__drawerNav__item"><a href="#" class="adminBar__drawerNav__item__link">ログアウト</a></li> 27 </ul> 28 </li> 29</ul> 30</header> 31<nav>左固定メニュー</nav> 32<main>メインコンテンツ</main> 33<footer>フッター</footer> 34</body>
css
1/*adminBar__secondary: right*/ 2.adminBar__secondary { 3 position: relative; 4 -webkit-box-pack: end; 5 -ms-flex-pack: end; 6 justify-content: flex-end; 7} 8.adminBar__secondary__item { 9 position: relative; 10} 11.adminBar__secondary__item:nth-of-type(n+2) { 12 margin-left: 15px; 13} 14/*adminBar__drawerNav*/ 15.is-adminBar__drawerNavBtn { 16 margin-top: 4px; 17} 18.is-adminBar__drawerNavBtn__iconSVG { 19 width: 28px; 20} 21.adminBar__drawerNav { 22 background: #32373c; 23 display: none; 24 padding: 5px 0 4px; 25 top: 44px; 26 right: 0; 27 position: absolute; 28 overflow: hidden; 29 min-width: 160px; 30 max-width: 160px; 31 width: 100%; 32} 33.adminBar__drawerNav__item {} 34.adminBar__drawerNav__item--userName { 35 color: rgba(240,245,250,1); 36 font-size: 1.2rem; 37 line-height: 1.4; 38 padding: 6px 10px 6px 16px; 39} 40.adminBar__drawerNav__item--userName:after { 41 content: 'さん'; 42} 43.adminBar__drawerNav__item--userName__item { 44 display: inline-block; 45 min-width: 110px; 46 max-width: 110px; 47 width: 100%; 48 overflow: hidden; 49 text-overflow: ellipsis; 50 white-space: nowrap; 51} 52.adminBar__drawerNav__item__link { 53 color: rgba(240,245,250,.7); 54 display: block; 55 font-size: 1.3rem; 56 line-height: 1.4; 57 padding: 6px 16px; 58 white-space: nowrap; 59} 60.adminBar__drawerNav__item__link:hover { 61 color: #fd8a39; 62}
試したこと
header以下navやmainなどコンテンツがなければ正常に動いたため、
以下のclosest('body')
部分を書き換えれば動くかと思ったのですがうまく行きませんでした。
js
1$(document).on('click touchend', function(event) { 2 if (!$(event.target).closest('body').length) { 3 // ここに処理; 4 fadeOutMenu();//関数呼びだし 5 } 6});
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/03 03:50