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

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

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

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

JavaScript

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

jQuery

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

Q&A

解決済

1回答

2138閲覧

遅延で非表示になる挙動が作りたい

akamotosan

総合スコア12

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2016/10/14 07:00

いつもお世話になっております。

実現したいこと

「遅延で非表示になる挙動が作りたい。」
具体的にはスマホ版google driveのメニューバーのような挙動です。

1.表示されている「メニュー」が5秒後に非表示
2.「メニュー」が非表示になった後、bodyをタップすると「メニューバー」が表示
3.2で表示した「メニューバー」は再度、5秒後に非表示

上記3.2で表示した「メニューバー」は5秒後に非表示の部分でつまずいています。

###該当のソースコード

<style> #menu{ animation: anime1 1s ease 5s 1 forwards; } @keyframes anime1 { 0% {opacity: 1.0;} 100% {opacity: 0.0;} } #menu.show { animation: anime2 1s ease 5s 1 forwards; } @keyframes anime2 { 0% {opacity: 1.0;} 100% {opacity: 0.0;} } #menu.hide { animation: anime3 1s ease -2s 1 forwards; } @keyframes anime3 { 0% {opacity: 0.0;} 100% {opacity: 0.0;} } </style> <script type="text/javascript"> $("#switch").click(function(){ if( $("#menu").hasClass("show") == false){ alert("表示") $("#menu").addClass("show"); $("#menu").removeClass("hide"); }else{ alert("非表示") $("#menu").addClass("hide"); $("#menu").removeClass("show"); } }) </script> <div id="switch">スイッチ</div> <div id="menu">メニュー</div>

###試したこと

当初はsetIntervalで遅延を表現しました。
しかし、自然非表示中にスイッチによる非表示にすると5秒のカウントがリセットされず、
再表示したときに続きのカウントから始まってしまう。
ですのでsetIntervalでの遅延は断念しました。


次にcss3.0でanimationのdelayを利用しました。
しかし、これでも問題があります。

・5秒後に自然非表示になった後では、スイッチによる非表示か自然非表示かの判定が分からない。(opacityの数値でif判定するとややこしくなるので、シンプルにフラグをつける形でif判定したいため)

簡略化しましたが以上が悩んでいる部分の骨子です。

お手数ではありますが、どうぞよろしくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

showはいりますか?隠すだけならhideの設定のみでよいかと。
またsetIntervalは繰り返し処理なのでsetTimeoutしてみてはどうでしょうか?

CSS

1#menu.hide {display:none;}

javascript

1$(function(){ 2 $("#switch").on('click',function(){ 3 var flg=!$("#menu").hasClass("hide"); 4 console.log(flg?"非表示":"表示"); 5 setTimeout(function(){$("#menu").toggleClass('hide',flg)},5000); 6}); 7}); 8

HTML

1<div id="switch">スイッチ</div> 2<div id="menu">メニュー</div> 3

#追記
これでどうでしょう?

javascript

1$(function(){ 2 var timerID=0; 3 $("#switch").on('click',function(){ 4 $("#menu").toggleClass('hide'); 5 if(timerID) clearTimeout(timerID); 6 if(!$('#mene').hasClass('hide')) timerID=setTimeout(function(){$("#menu").addClass('hide',flg)},5000); 7 }); 8});

投稿2016/10/14 08:11

編集2016/10/17 00:37
yambejp

総合スコア114769

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

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

akamotosan

2016/10/14 14:18

ご回答ありがとうございました。 しかし、こちらの説明が足りないせいでまったく違う仕様で伝わっているようです。。。 求めている挙動は下記です。 ・メニューはほっておくと自然に5秒後に非表示 ・スイッチを押すとメニューは即時非表示 ・メニューが非表示の時にスイッチを押すとメニューは即時表示 ・メニューが再度表示されてから5秒後たつと非表示
yambejp

2016/10/17 00:38

追記しておきました
akamotosan

2016/10/17 04:48

確認しました。 おかげで希望する動きを実現することができました。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問