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

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

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

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

Q&A

解決済

3回答

577閲覧

1つのクリックで2つの要素を、別のタイミングでアクションしたいときは?

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

0グッド

0クリップ

投稿2017/12/31 11:31

###■ざっくり
「#label」をクリックしたら、「a」と「b」を別のタイミングで表示したいです。しかし正しい記述がわかりません。

###■くわしく
➀「#label」をクリックする。

➁「a」が5秒かけて表示して消える。
【.fadeIn(1000).delay(2000).fadeOut(2000)】の部分

➂「b」が5秒後に表示される。
【.delay(5000).fadeIn(1000);】の部分

###■コード
今はこのようになっていて、「a」と「b」が同時に表示されてしまいます。「b」はちょっと後にしたいのですが。。

javascript

1<!-- a --> 2<script> 3(function($) { 4 $('#label').on('click', function() { 5 $('.a').fadeIn(1000).delay(2000).fadeOut(2000); 6 }); 7})(jQuery); 8</script> 9 10<!-- b --> 11<script> 12(function($) { 13 $('#label').on('click', function() { 14 $('.b').delay(5000).fadeIn(1000); 15 }); 16})(jQuery); 17</script>

こういう感じで入れ子にしたいのです。でも、こういう感じでいくら試してもうまく目的通りにいきません。

javascript

1<script> 2(function($) { 3 $('#label1').on('click', function() { 4 $(('.a').fadeIn(1000).delay(2000).fadeOut(2000), 5 $('.b').delay(5000).fadeIn(1000)); 6 }); 7})(jQuery); 8</script>

お詳しい方、宜しくお願い致します。

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

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

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

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

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

guest

回答3

0

ベストアンサー

moredeep様同様、こちらの環境でも以下のコードで確認できました。

javascript

1(function($){ 2 $('#label').on("click",function(){ 3 $('.a').fadeIn(1000).delay(2000).fadeOut(2000); 4 $('.b').delay(5000).fadeIn(1000); 5 }); 6})(jQuery);

jsfiddle

また、イベント実行を一度だけにしたい場合は.one()を使うといいですよ。.one()で設定されたイベントは一度実行されると解除されます。

イベントに設定した関数内でまたイベントを設定すれば、処理が終わった後にまたクリックイベントを有効にする、ということができ、一度に複数実行される、ということがなくなります。

以下そのように実装した場合のコードです。

またこのコードでは.b.delay()を消させていただきました。このように.a.fadeOut()のフィードバックとして.bのアニメーションを設定すれば、わざわざ.delay()を書く必要がなくなります。

javascript

1function ctrlAB($){ 2 $('.a,.b').css("display","none"); 3 $('.a') 4 .fadeIn(1000) 5 .delay(2000) 6 .fadeOut(2000,function(){ 7 $('.b').fadeIn(1000); 8 $('#label').one("click",ctrlAB.bind(undefined,$)); 9 }); 10} 11 12(function($){ 13 $('#label').one("click",ctrlAB.bind(undefined,$)); 14})(jQuery);

jsfiddle

投稿2017/12/31 14:14

編集2018/01/01 05:18
namnium1125

総合スコア2043

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

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

moredeep

2017/12/31 14:16

.one()便利ですね。いいものを教えてもらいました。
namnium1125

2017/12/31 14:21

私もteratailで教えてもらいました。(^ ^; teratailはいいサイトです。
退会済みユーザー

退会済みユーザー

2017/12/31 21:48

できました!助かりました!!どうもありがとうございます。 >この関数内でまたイベントを設定すれば、処理が終わった後にまたクリックイベントを有効にする、ということができ、一度に複数実行される、ということがなくなります。 へぇ~!ありがとうございます。こちらもあわせて覚えておきます。
guest

0

試してみましたが、以下で動作しました。(chrome,IE11で確認)

$(function(){ $('#label').on('click', function() { $('.a').fadeIn(1000).delay(2000).fadeOut(2000); $('.b').delay(5000).fadeIn(1000); }); });

「「a」と「b」が同時に表示されてしまいます。」とありますが、もしかして、
一度「a」がfadeIn→fadeOutし、「a」が再度fadeIn→fadeOutするとともに「b」が表示される、という意味だったりしますか?
だとしたらクリックイベントが2回発生し、アニメーションがキューに登録されてしまっていているせいです。
1回目のクリックイベントでクリックイベントを削除するか、アニメーションが終わっていなければ再実行されないように制御してください。

蛇足:質問するとき、動作環境を記載すると、回答者は検証しやすいので回答も集まりやすいです。

投稿2017/12/31 12:28

moredeep

総合スコア1507

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

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

退会済みユーザー

退会済みユーザー

2017/12/31 21:46

なるほどなるほど。コピペだけでなんとかしようとしてるとダメですね。仕組みや質問時の方針など、教えて頂きありがとうございます。
guest

0

未検証ですがsetTimeoutは試されました?

javascript

1(function($) { 2 $('#label1').on('click', function() { 3 $(('.a').fadeIn(1000).delay(2000).fadeOut(2000); 4 setTimeout(function({ 5 $('.b').delay(5000).fadeIn(1000)); 6 }), 5000); 7 }); 8})(jQuery);

投稿2017/12/31 12:10

sousuke

総合スコア3828

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問