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

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

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

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

Q&A

2回答

2255閲覧

jquery スクロールするとフェードイン 上手くいかない。

8888

総合スコア12

jQuery

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

0グッド

0クリップ

投稿2019/06/22 13:58

編集2019/06/22 15:51

jquery スクロールするとフェードインする手法を行おうとしましたが、上手くいきませんでした。

問題点はスクロールすると全ての画像が同時に表示されてしまう事です。

コードは下記です。

html

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>Document</title> <link href="css/style.css" rel="stylesheet"> <script src="https://code.jquery.com/jquery-3.4.1.js" integrity="sha256WpOohJOqMqqyKL9FccASB9O0KwACQJpFTUBLTYOVU="crossorigin="anonymous"></script> <script src="js/scroll.js"></script> </head> <body> <div class="wrapper"> <div class="box red"> <img src="img/s1.jpg" alt=""> <p>block1</p> </div> <div class="box blue"> <img src="img/s2.jpg" alt=""> <p>block2</p> </div> <div class="box yel"> <img src="img/s3.jpg" alt=""> <p>block3</p> </div> <div class="box grn"> <img src="img/s4.jpg" alt=""> <p>block4</p> </div> </div> </body> </html>

css

@charset utf-8; .wrapper { width: 900px; margin: 0 auto; } .box { text-align: center; padding: 100px 0; } .box img { width: 300px; } .red { background-color: red; } .blue { background-color: blue; } .yel { background-color: yellow ; } .grn { background-color: green; }

js

$(function(){ var boxcss = { visibility:"hidden", opacity:"0" }; $(".box img").css(boxcss); //on(イベント)後から追加したdomも取得する。また複数イベントを設定できる。 //.each(function(){ここの中で繰り返し} $(window).on("scroll", function(){ $(".box img").each(function(){ var imgPos = $(this).offset().top; //window上から.boxまでの距離 var scroll = $(window).scrollTop();//スクロールした分量 var windowHeight = $(window).height();//windowの高さ if(scroll > imgPos - windowHeight + windowHeight / 5){ $(".box img").css("visibility","visible") $(".box img").animate({opacity:1},500); } }); }); });

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

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

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

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

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

miyabi_takatsuk

2019/06/22 14:08

スクリーンですか?スクロールですか? タイトルも含め、統一をお願いします。 文脈から、スクロールだとお見受けしますが、見た方を混乱させるものであると、回答がつきにくくなると思います。
8888

2019/06/22 14:44 編集

ご指摘ありがとうございます。 誤字です。
guest

回答2

0

とりあえずこうでは?

js

1 $(".box img").each(function(){ 2 var imgPos = $(this).offset().top; //window上から.boxまでの距離 3 var scroll = $(window).scrollTop();//スクロールした分量 4 var windowHeight = $(window).height();//windowの高さ 5 if(scroll > imgPos - windowHeight + windowHeight / 5){ 6 //$(".box img").css("visibility","visible") 7 $(this).css("visibility","visible") 8 //$(".box img").animate({opacity:1},500); 9 $(this).animate({opacity:1},500); 10 } 11 });

投稿2019/06/22 14:47

kei344

総合スコア69398

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

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

8888

2019/06/22 14:53

回答ありがとうございます。 thisにするという事ですね。 一度試してみます。
8888

2019/06/22 15:03

試しましたが、thisはwindowになるようです。
kei344

2019/06/22 15:05

> 試しましたが、thisはwindowになるようです。 どのように確認されたかわかりませんが、とても不思議な挙動ですね。
8888

2019/06/22 15:44

おー上手くいってますね。 あとで調べ直したらimgは取れているようです。 eachの外でconsole.logしてました。 ただ自分の環境だと上手く行きませんでした。変わらず同時です。 単純に画面を読み取るのが遅くてカクカクしてるだけでしょうか? それともファーストビューに最初からあると機能しないのでしょうか?
kei344

2019/06/22 16:00

> ファーストビューに最初からあると機能しないのでしょうか? そりゃスクロールイベントが起きるまで処理されませんから。 https://jsfiddle.net/kugsv7nz/
8888

2019/06/23 04:19 編集

いえ、そういう事では無く。 同時に発生してしまう事です。
kei344

2019/06/23 04:32

画面に表示されたらその画面内の全アイテムが表示されるように組まれているからそうなりますね。
8888

2019/06/23 05:37

すみません。 説明の仕方悪かったかと思いますので整理します。 keiさんのは 一つずつ.box imgの1/5 がwindowsの領域に入ったら下記が .css("visibility","visible") .animate({opacity:1},500); が効いています。 ですが、自分の場合領域に入っていないアイテムも全て同時に表示されます。
kei344

2019/06/23 05:42

提示されたコードと本体のコードが違いすぎるのでは。こちらが回答してからもコードを書き換えられているようですが、特にそれには対応しません。あと、適当に他人のハンドルネームを略さないでください。
8888

2019/06/23 05:53

中身はthis以外は変更していません。 書き換えたのは中身を綺麗にしたりしただけです。内容見て頂ければ分かると思います。 略して事について不快に思われたようでしたらすみません。 ありがとうございました。
miyabi_takatsuk

2019/06/23 17:31 編集

横槍失礼します。 key344さんのご回答通り、 if(scroll > imgPos - windowHeight + windowHeight / 5){ //$(".box img").css("visibility","visible") $(this).css("visibility","visible") //$(".box img").animate({opacity:1},500); $(this).animate({opacity:1},500); } の、部分の、.css("visibility","visible")と、.animate({opacity:1},500);を $(this)に対して効かせても、全て同時に表示されてしまう、ということですか? また、全ての画像が、ファーストビュー領域内に存在しているってことはないでしょうか?
8888

2019/06/24 10:38

すみません。 回答ありがとうございます。 なんとかなるかもなので自分で解決します。
guest

0

要件がはっきりしないので kei344 さんの回答でいいと思ったのですが、実はこの質問と同じようなことをしたいのでしょうか?

jQueryで順番にアニメーションさせたい(スクロール)
https://teratail.com/questions/194190

投稿2019/06/24 03:57

x_x

総合スコア13749

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

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

8888

2019/06/24 10:37

すみません。 回答ありがとうございます。 なんとかなるかもなので自分で解決します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問