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

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

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

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

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

CSS

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

Q&A

解決済

1回答

407閲覧

CSS transitionとjQueryで開閉メニューを作りたい

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

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

CSS

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

0グッド

0クリップ

投稿2020/02/25 01:10

前提・実現したいこと

CSS transitionとjQueryで開閉メニューを作りたい

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

メニューを開くボタンを押すと左から右へtransition効果のメニューが出てくるのですが、 出てきたコンテンツを押して一度メニューを非表示にして、 もう一度メニューを開くボタンを押してもtransition効果が無効な状態で表示されます 有効な状態で繰り返すにはどうしたらいいのでしょうか

該当のソースコード

HTML

1<input id="m" type="button" value="メニューを開く"> 2 3<div id="menu" style="position:fixed;z-index:1" class="boxp"> 4<div style="float:left;width:33%;height:100%;background-color:red" onclick="document.getElementById('menu').classList.remove('on');menu.style.display='none';">コンテンツ1</div> 5<div style="float:left;width:33%;height:100%;background-color:green" onclick="document.getElementById('menu').classList.remove('on');menu.style.display='none';">コンテンツ2</div> 6<div style="float:left;width:33%;height:100%;background-color:blue" onclick="document.getElementById('menu').classList.remove('on');menu.style.display='none';">コンテンツ3</div> 7</div> 8

jQuery

1<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script> 2<script type="text/javascript"> 3<!-- 4 $(document).ready(function () { 5$("#m").on("click", function(){ 6 7if(!document.getElementById("menu").classList.contains("on")){ 8$("#menu").toggleClass("on"); 9}else{ 10$("#menu").removeClass("on"); 11} 12menu.style.display=""; 13 14}); 15 }) 16</script> 17

CSS

1<style> 2.boxp{ 3opacity: 0; 4width:0%; 5height:70%; 6bottom:0%; 7transition: 1s; 8} 9.boxp.on{ 10opacity: 1; 11width:100%; 12height:70%; 13background-color:black; 14bottom:0%; 15} 16</style>

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

アニメーションしないのは、
メニューのonclick=""内でmenu.style.display='none'をしているからです。
display='none'はOn/Offの2つの状態しかないのでアニメーションはしません。
これを削除すればアニメーションするようになります。


質問内容とは外れますが、
スクリプトをボタンは別箇所、メニューはインラインというように分けるのは管理上好ましくないです。
同じ個所に統一して記述したほうが管理しやすいですよね。
また、どちらも同じ開閉処理なのでまとめて記述できます。

あと、Classの存在をチェックしていますが、toggleClass自体が存在チェックしてますので不要ですね。

CSSもインラインと混在してますが、これもCSSファイルにまとめて、HTMLはなるべくシンプルにした方がいいでしょう。

html

1<input id="m" type="button" value="メニューを開く"> 2 3<div id="menu" class="boxp"> 4 <div>コンテンツ1</div> 5 <div>コンテンツ2</div> 6 <div>コンテンツ3</div> 7</div>

css

1.boxp{ 2 opacity: 0; 3 width: 0%; 4 height: 70%; 5 bottom: 0%; 6 transition: 1s; 7} 8.boxp.on{ 9 opacity: 1; 10 width: 100%; 11 height: 70%; 12 background-color: black; 13 bottom: 0%; 14} 15#menu { 16 position: fixed; 17 z-index: 1; 18} 19#menu>div { 20 float:left ; 21 width: 33%; 22 height: 100%; 23} 24#menu>div:nth-child(1) { 25 background-color:red; 26} 27#menu>div:nth-child(2) { 28 background-color:green; 29} 30#menu>div:nth-child(3) { 31 background-color:blue; 32}

jquery

1$(document).ready(function () { 2 $("#m, #menu").on("click", function(){ 3 $("#menu").toggleClass("on"); 4 }); 5})

投稿2020/02/25 02:04

編集2020/02/25 02:22
hatena19

総合スコア33782

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

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

退会済みユーザー

退会済みユーザー

2020/03/05 10:06

返答ありがとうございます。 無事に動かす事ができました。 わざわざ書き方もご指南いただきありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問