いつもお世話になっております。
実現したいこと
「遅延で非表示になる挙動が作りたい。」
具体的にはスマホ版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判定したいため)
簡略化しましたが以上が悩んでいる部分の骨子です。
お手数ではありますが、どうぞよろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/14 14:18
2016/10/17 00:38
2016/10/17 04:48