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

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

新規登録して質問してみよう
ただいま回答率
85.35%
スクロール

スクロールとは、ディスプレイスクリーン上において連続的にコンテンツが滑っていくことを指します。

JavaScript

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

レスポンシブWebデザイン

レスポンシブWebデザイン(RWD)は、スクリーンのサイズ、プラットフォーム、オリエンテーションに基づいて様々なデバイスで最適のサイトを生成するのウェブデザインとその開発のアプローチ方法を呼びます。

HTML

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

CSS

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

Q&A

1回答

1120閲覧

JavaScriptでのクラスの削除方法がわからないです。

akito-miyazato

総合スコア5

スクロール

スクロールとは、ディスプレイスクリーン上において連続的にコンテンツが滑っていくことを指します。

JavaScript

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

レスポンシブWebデザイン

レスポンシブWebデザイン(RWD)は、スクリーンのサイズ、プラットフォーム、オリエンテーションに基づいて様々なデバイスで最適のサイトを生成するのウェブデザインとその開発のアプローチ方法を呼びます。

HTML

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

CSS

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

0グッド

0クリップ

投稿2021/02/23 15:14

イベントの解除かクラスの解除方法がわからないです。

ハンバーガーボタンをクリックして、横からナビメニューが出てきた後、
そのメニューをクリックすると、スクロールでコンテンツに移動して、ナビメニューは自動的に閉じるようにしたいです。

スクロールで移動するのと、クリックした後ナビメニューを閉じるのまではできたのですが、
その後ナビメニューが開かなくなります。
下記を見ていただきたいのですが、閉じるために加えた'nav-close'というクラスが、
メニューを閉じた後でもずっとついたままになっているのが原因だと思われます。

やりたいこととしては、ナビメニューが閉じた後には'nav-close'というクラスを削除したいです。
ちなみにレスポンシたときにハンバーガボタンが出てくるのでmatchMediaをつけています。
どなたか教えていただけますと幸いです。

(javascript)

function eventRemove (){
closeNavMenu.classList.toggle('nav-close');
}

if (matchMedia('only screen and (max-width:780px').matches){
for (let i = 0; i < closeBtn.length; i++){
closeBtn[i].addEventListener('click', eventRemove);
}
}

(CSS)

.nav{
position: fixed;
top: 0;
right: 0;
width: 35%;
height: 100vh;
padding: 73px 0;
background-color: #4d5269;
z-index: 20;
transform: translateX(100%);
transition: .5s cubic-bezier(0.175, 0.885, 0.32, 1.275);
box-shadow: 0 0 4px #333;
}

.nav.nav-close{
transform: translateX(100%);
}

(HTML)

<ul class="nav"> <li class="nav-list"><a href="#menu1" class="close">Service</a></li> <li class="nav-list"><a href="#menu2" class="close">Works</a></li> <li class="nav-list"><a href="#menu3" class="close">Skills</a></li> <li class="nav-list"><a href="#menu4" class="close">Profile</a></li> <li class="nav-list"><a href="#menu5" class="close">Q&A</a></li> <li class="nav-list"><a href="#menu6" class="close">Contact</a></li> </ul>

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

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

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

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

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

guest

回答1

0

toggle()は切替をするのでadd()remove()の二つを使う必要は無いですよ?

かなりコードが足らないような気がしますが…
通常時のnavにtransform: translateX(100%);がついていてこれで閉じてますよね?(画面外)

css

1.nav.nav-close{ 2  transform: translateX(100%); 3}

.nav-closeを付与した後も同じtransform: translateX(100%);なので閉じたままになりますよね?
.nav-closeを外しても通常時に戻るだけなのでやはり閉じたままですよね?

ご提示されているコードだとたぶん誰も答えられないかと…

.nav-openを付与してtransform: translateX(0%);とすると、
classがついているときは開いている。※100%→0%(画面内)
クリックして切り替えると.nav-openが外れてtransform: translateX(100%);が効き画面外へ。
※0%→100%

こんな感じでしょうか。
足らないコードを補って試してみましたが動きました。
以下サンプルです。
参考になりますでしょうか。

sample

1<style media="screen"> 2 .nav{ 3 position: fixed; 4 top: 0; 5 right: 0; 6 width: 35%; 7 height: 100vh; 8 padding: 73px 0; 9 background-color: #4d5269; 10 z-index: 20; 11 transform: translateX(100%); 12 transition: .5s cubic-bezier(0.175, 0.885, 0.32, 1.275); 13 box-shadow: 0 0 4px #333; 14 } 15 16 .nav.nav-close{ 17 transform: translateX(0%); 18 } 19</style> 20 21<button type="button" name="button" onclick="eventRemove();">maru</button> 22<ul class="nav"> 23<li class="nav-list"><a href="#menu1" class="close">Service</a></li> 24<li class="nav-list"><a href="#menu2" class="close">Works</a></li> 25<li class="nav-list"><a href="#menu3" class="close">Skills</a></li> 26<li class="nav-list"><a href="#menu4" class="close">Profile</a></li> 27<li class="nav-list"><a href="#menu5" class="close">Q&A</a></li> 28<li class="nav-list"><a href="#menu6" class="close">Contact</a></li> 29</ul> 30 31<script type="text/javascript"> 32 function eventRemove (){ 33 document.getElementsByClassName('nav')[0].classList.toggle('nav-close'); 34 } 35 36 if (matchMedia('only screen and (max-width:780px').matches){ 37 for (let i = 0; i < closeBtn.length; i++){ 38 closeBtn[i].addEventListener('click', eventRemove); 39 } 40 } 41</script>

投稿2021/02/23 16:32

編集2021/02/23 16:34
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

akito-miyazato

2021/02/24 12:21

実装できました。 僕のは余計わかりにくくなってましたね。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問