質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1792閲覧

ドロワーメニューをjavascriptで実装したい

MTON

総合スコア13

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/02/08 12:31

タイトル通りですが、ドロワーメニューをjavascriptで実装したいです。
そこで、以下コードを実装しました。
ひとつだけうまくいかないのが、
画面をクリックした際にドロワーメニューを閉じるようにするのがうまくいかないです。
どなたかご教授頂けないでしょうか。
宜しくお願いいたします。

<style> body { margin: 0; padding: 0; } header { height: 70px; background: #000; position: fixed; width: 100%; } ul#navigation { list-style-type: none; padding: 0; margin: 0; position: fixed; width: 200px; background: red; height: 100%; padding-top: 100px; right: -200px; transition: all 0.3s ease; } ul#navigation.active { right: 0; transition: all 0.3s ease; } .menu { position: fixed; width: 70px; height: 70px; background: gray; right: 0; z-index: -1; } .menu span { width: 35px; height: 1px; background: blue; display: block; text-align: center; margin: 0 auto; margin-top: 17px; } </style> <header id="hdr"> <ul id="navigation"> <div id="batsu">×</div> <li><a href="">リスト</a></li> <li><a href="">リスト</a></li> <li><a href="">リスト</a></li> </ul> <div id="humber" class="menu"> <span></span> <span></span> <span></span> </div> </header> <script> var hmbgr = document.getElementById("humber"); var navi = document.getElementById("navigation"); hmbgr.addEventListener("click", function () { navi.classList.toggle("active"); }); var batsu = document.getElementById("batsu"); batsu.addEventListener("click", function () { navi.classList.remove("active"); }); //試してみたこと var bodys = document.body; bodys.addEventListener("click", function () { navi.classList.remove("active"); }); </script>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

naviのクラスにactiveがある時のみ処理を実行させれば良いので、原型のコード通りにやると以下のようになると思います。

JavaScript

1bodys.addEventListener('click', () => { 2 if(navi.classList.contains('active')) { 3 navi.classList.toggle('active'); 4 } 5})

ただ、bodyでこれをやるとイベントバブリングを考慮しなければならず、他の実装が面倒くさくなります。
そのためナビゲーションドロワーの下に画面全体を覆うオーバーレイを重ねて、そこをクリックした時にイベントが発火するようにする等、方法を変えたほうがよいかと思います。

投稿2020/02/08 16:14

take-t.t.

総合スコア360

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問