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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

1回答

1085閲覧

ハンバーガーメニューでページ内リンク時にメニューを閉じたい

satomisan

総合スコア5

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2021/05/10 03:53

編集2021/05/10 05:32

前提・実現したいこと

ハンバーガーメニューでページ内リンクをクリックした時、メニュー画面が閉じるようにしたい。

発生している問題・エラーメッセージ

リンクをクリックするとセクションには飛びますが、メニュー画面が表示されたままです。

###試してみた事
ページ内リンクで検索したものをいろいろコピーして貼り付けしてみましたが、動かず、過去のものも確認してみたのですが、初心者の為どの部分をどこに貼り付けたらいいのかがわかりません。

該当のソースコード

HTML

1<html> 2<body> 3 <header class="header"> 4 <div class="nav-bar"> 5 <div class="header-logo"> 6 <a href="index.html"><img src="image/logo.png" alt="会社ロゴ"></a> 7 </div> 8 <nav class="nav"> 9 <ul class="nav-list" id="menu"> 10 <li class="nav-item"><a href="#service">SERVICE</a></li> 11 <li class="nav-item"><a href="#company">COMPANY</a></li> 12 <li class="nav-item"><a href="#MANAGEMENT TEAM">MANAGEMENT TEAM</a></li> 13 <li class="nav-item"><a href="#contact">CONTACT</a></li> 14 </ul> 15 </nav> 16 </div> 17 <div class="hamburger" id="js-hamburger"> 18 <span class="hamburger_border hamburger_border_top"></span> 19 <span class="hamburger_border hamburger_border_center"></span> 20 <span class="hamburger_border hamburger_border_bottom"></span> 21 </div> 22 <div class="black_bg" id="js-black-bg"></div> 23 </header> 24 <script> 25 function toggleNav() { 26 var body = document.body; 27 var hamburger = document.getElementById('js-hamburger'); 28 var blackBg = document.getElementById('js-black-bg'); 29 30 hamburger.addEventListener('click', function() { 31 body.classList.toggle('nav-open'); 32 }); 33 blackBg.addEventListener('click', function() { 34 body.classList.remove('nav-open'); 35 }); 36} 37 </script> 38</body> 39</html>

CSS

1@media screen and (max-width:800px){ 2 body{ 3 margin: 0; 4 font-size: 15px; 5 } 6 .header{ 7 left:0; 8 top:0; 9 width: 100%; 10 height:70px; 11 } 12 .header-logo{ 13 width: 100%; 14 text-align: center; 15 margin: 0; 16 height: 70px; 17 } 18 19 .header-logo img{ 20 position: absolute; 21 top:0; 22 left:0; 23 right: 0; 24 bottom:0; 25 margin: auto; 26 width: 23vh; 27 height: auto; 28 29 } 30 .nav-bar{ 31 display: block; 32 position: relative; 33 display: block; 34 width: 100%; 35 height: 70px; 36 37 } 38 .nav{ 39 position: fixed; 40 right: -320px; 41 top:0; 42 width: 300px; 43 height:100vh; 44 padding-top: 60px; 45 background-color: gray; 46 transition: all .6s; 47 z-index:200; 48 overflow-y: auto; 49 margin: 0; 50 } 51 .nav-list{ 52 display: block; 53 margin: 0; 54 padding: 0; 55 } 56 .nav-item{ 57 text-align: center; 58 padding:0; 59 } 60 .nav-item a{ 61 display: block; 62 padding:10px 0; 63 color:#fff; 64 font-size:1.2em ; 65 line-height: normal; 66 letter-spacing: 1px; 67 } 68 .nav_item a:hover{ 69 background-color: #eee; 70 } 71 .nav-item a::after{ 72 display: none; 73 } 74 .hamburger{ 75 position: absolute; 76 right: 15px; 77 top:8px; 78 width: 40px; 79 height: 40px; 80 cursor:pointer; 81 z-index: 300; 82 } 83 .hamburger_border{ 84 position: absolute; 85 left:11px; 86 width: 18px; 87 height: 2px; 88 background-color: #333333; 89 transition: all .6s; 90 } 91 .hamburger_border_top{ 92 top:14px; 93 } 94 .hamburger_border_center{ 95 top:20px; 96 } 97 .hamburger_border_bottom{ 98 top:26px; 99 } 100 .black_bg{ 101 position: fixed; 102 left:0; 103 top:0; 104 width: 100vw; 105 height: 100vh; 106 z-index: 100; 107 background-color: #333333; 108 opacity: 0.5; 109 visibility: hidden; 110 transition: all .6s; 111 cursor: pointer; 112 } 113 .nav-open .nav{ 114 right:0; 115 } 116 .nav-open .black_bg{ 117 opacity: .8; 118 visibility: visible; 119 } 120 .nav-open .hamburger_border_top{ 121 transform: rotate(45deg); 122 top:20px; 123 } 124 .nav-open .hamburger_border_center{ 125 width: 0; 126 left:50%; 127 } 128 .nav-open .hamburger_border_bottom{ 129 transform: rotate(-45deg); 130 top:20px; 131 }

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

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

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

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

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

m.ts10806

2021/05/10 04:04

どの部分で「閉じる」を実装している想定ですか?
satomisan

2021/05/10 04:12

ご質問ありがとうございます。 メニューのリンクタグをクリックし、セクションに飛んだ時にはメニューが閉じてる状態にしたいです。
m.ts10806

2021/05/10 04:26

いえ、そういうことではなく、現時点で提示されたコードのどこでやりたいことを実現させているつもりなのかを聞いています。 …やってみたけど出来てないのか …まだやってみてないのか そのあたりが質問文からは伝わりませんでした。 調べたこと試したことを追記してください
satomisan

2021/05/10 04:45

申し訳ごじざいません。 コードには記載しておりません。検索して出てきたものをいろいろコピー貼り付けてみましたが、動かなかったので現状は記載していない状態です。検索して貼り付けたものがいろいろあり探しきれないので、もしこの状態からでわかれば教えて頂ければ幸いです。
m.ts10806

2021/05/10 04:49

では、その現状を質問本文編集して追記してください。 ただ、拾ってきたものをコピーして貼り付けての試行錯誤だとすぐに限界が来ますので、これを機に「理解できてから採用する」方向にシフトされたほうが良いかと思います。 そうすると質問するときも作業依頼感がなくなります。
satomisan

2021/05/10 05:35

おっしゃる通りで、コピー貼り付けではなかなか上手くいかず一から理解しなければ検索だけでも時間はかかてしまいます。 質問本文編集させて頂きました。
guest

回答1

0

ベストアンサー

既出です。過去質問を参考にしてください。

[ハンバーガーメニュー ページ内リンク] の検索結果: 90件

ハンバーガーメニュー ページ内リンクに関連する質問・回答の検索結果(1ページ目)|teratail

質問の追記を受けて追記

初心者の為どの部分をどこに貼り付けたらいいのかがわかりません。

では、簡単に説明をします。

「ハンバーガーメニューでページ内リンクをクリックした時、メニュー画面が閉じる」を実現するには、3つのことが理解できないといけません。
それは、

  1. ハンバーガーメニューのページ内リンクを取得する
  2. 何かをクリックした時、何かをする
  3. メニュー画面を閉じる

です。


「ハンバーガーメニューのページ内リンクを取得する」ですが、拝見したところ、メニューはすべてページ内リンクでしたので、今回はdocument.getElementById('menu')で十分です。


「何かをクリックした時、何かをする」ですが、イベント処理を学びましょう。

ブラウザイベントの紹介


「メニュー画面を閉じる」ですが、以下のコードがそれにあたります。
body.classList.remove('nav-open');


以上を組み合わせれば、動作します。

投稿2021/05/10 04:42

編集2021/05/10 05:40
Lhankor_Mhy

総合スコア36960

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

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

satomisan

2021/05/10 04:52

ご返答ありがとうございます。過去の質問も確認したのですが、どの部分がメニューを閉じる部分かわからず、どこからどの部分に記載をしたらいいのかわからずご質問させて頂きました。初心者で申し訳ございません。
Lhankor_Mhy

2021/05/10 05:18

> どの部分がメニューを閉じる部分かわからず ↓これです。 body.classList.remove('nav-open');
satomisan

2021/05/10 05:38

body.classList.remove('nav-open');この閉じる部分にリンクをクリックすると閉じるにしたいのですが、何を追加したらいいのでしょうか。1つ1つ質問してしまい本当すいません!
satomisan

2021/05/10 06:11

簡単にと言いながら、とても親切にご説明頂きありがとうございます。動きました。(T T)。本当にありがとうございます。ブラウザイベント処理この機会に一から勉強させて頂きます。ありがとうございます。
Lhankor_Mhy

2021/05/10 09:08

お役に立てたようで何よりです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問