🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
jQuery

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

Q&A

解決済

2回答

2495閲覧

jQueryのfadeOutで消える要素、の下の要素を、ゆっくりと上にあげたい

kuragera

総合スコア7

jQuery

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

0グッド

0クリップ

投稿2021/02/17 10:09

編集2021/02/17 10:17

###前提・実現したいこと
.itemをfadeOutさせるとき、下の.boxが上にきます。
これをゆっくりと、1秒かけて上にもっていきたいです。

具体的に、以下の流れを目指したです。

クリック:.itemのfadeOutスタート & .boxを上にゆっくり移動するのスタート
↓1秒後
処理完了:.itemのfadeOut完了 & .boxの移動完了

###発生している問題
ゆっくりと上にもっていく方法がわかりません。

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

html

1<div class="wrap"> 2 <div class="item"></div> 3 <div class="box"></div> 4</div> 5<button type="button" class="fadeOut">fadeOut</button> 6<button type="button" class="fadeIn">fadeIn</button>

css

1.wrap {width: 100%; height: 100px;} 2.item {background:skyblue; width: 100%; height: 50px;} 3.box {background: salmon; width: 100%; height: 50px;}

jQuery

1$('.fadeOut').click(function(){ 2 $('.item').fadeOut(1000); 3}); 4$('.fadeIn').click(function(){ 5 $('.item').fadeIn(1000); 6});

###試したこと
fadeOutが1000なので、CSSにtransitionとして1sを追加すれば、.boxが移動する時間はfadeOutと同じ時間でゆっくりになると思いました。(jQueryの1000 = CSSの1s = 1秒)

CSS

1.wrap {width: 100%; height: 100px;} 2.item {background:skyblue; width: 100%; height: 50px;} 3.box {background: salmon; width: 100%; height: 50px;} 4.box {transition: 1s;} /* transition を追加 */

そしてjQueryの方はクリック時にすぐにboxが移動しはじめるように.itemにabsoluteをつけました。

$('.fadeOut').click(function(){ $('.item').fadeOut(1000); $('.item').css('position','absolute'); // .itemをabsoluteにして、下の.boxが fadeOut完了を待たずにすぐに上に移動しはじめるように追加 }); $('.fadeIn').click(function(){ $('.item').fadeIn(1000); $('.item').css('position','relative'); // 同じ意図で追加 });

以上の変更を加えても意図した動作が実現できませんでした。
宜しくお願い致します。

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

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

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

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

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

guest

回答2

0

ベストアンサー

fadeInは指定がないですか?

javascript

1 $('.fadeOut').click(function(){ 2 $('.item').fadeOut(1000).queue(function(){ 3 $('.box').css({"margin-top":$('.item').height(),position:"absolute"}).animate({"margin-top":0},1000).delay(1000).queue(function(){ 4 $(this).css({"margin-top":"","position":""}).dequeue(); 5 }); 6 $(this).dequeue(); 7 }); 8 });

投稿2021/02/17 11:11

yambejp

総合スコア116690

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

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

kuragera

2021/02/17 12:29

そちら.itemはゆっくりでなくカチっと上にあがるような挙動でした。fadeOutの挙動はhope_mucciさんのサンプルの通りです。 >fadeInは指定がないですか? fadeOutと真逆の挙動を考えていますが苦戦していますのでもし謎が解けましたらまたお願い致します。
kuragera

2021/02/18 01:39

はい。丁寧なコードでありがとうございます。相当難しそうですねこれは。fadeOutの挙動はhope_mucciさんのサンプルの通りで、つまり以下2つの挙動が同時並行で行われるものをイメージしています。 >.itemのfadeOutスタート & .boxを上にゆっくり移動するのスタート queueの使い方はhope_mucciさんのものと違い参考になりました。
yambejp

2021/02/18 01:52

あー並行でいいんですね? それなら楽だと思います $(function(){ $('.fadeOut').click(function(){ $('.item').animate({opacity:0,height:0},1000); }); $('.fadeIn').click(function(){ $('.item').animate({opacity:1,height:50},1000); }); });
kuragera

2021/02/18 01:56

animateにopacityをそう加えれあばよかったのですか。どうもありがとうございました。
guest

0

ちょうどこのサイトに複数のアニメーションを並列制御するための方法が書かれていますので参考にしてください。

アニメーションの細かな挙動を制御するには?(animate/show/hide/fadeIn/fadeOut/slideUp/slideDown)

オプションパラメータのqueueでアニメーションの並列制御が可能です。

javascript

1$('.fadeOut').click(function(){ 2 $('.item') 3 .fadeOut({duration:1000, queue:false}) 4 .slideUp({duration:1000, queue:false}); 5});

サンプル:
https://codepen.io/haruyan-hopemucci/pen/Vwmbyyz

fadeOutは簡単ですが、fadeInはopacity処理の関係で難しいようです。
いろいろと工夫してみてください。

投稿2021/02/17 10:53

hope_mucci

総合スコア4447

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

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

kuragera

2021/02/17 12:26

サンプル思った通りの挙動でした。ありがとうございました。 仰る通りfadeInは難しいですね。苦戦中です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問