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

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

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

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

Q&A

解決済

1回答

4883閲覧

スクロールして要素が表示されたらクラスを付与したい(ただし同じクラスが複数ある)

huwatoro

総合スコア19

JavaScript

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

0グッド

0クリップ

投稿2020/04/20 03:43

以下のHTMLのように同じクラス名が複数あるのですが、一つずつに対して「スクロールして要素が表示されたらクラス付与」をやりたいです。

html

1<section> 2 <div class="ttile">title</div> 3 <div class="detail">detail</div> 4</section> 5<section> 6 <div class="ttile">title</div> 7 <div class="detail">detail</div> 8</section>

下記のようにすると、たぶんクラスが複数あるせいだと思うのですが一気にすべてにis-showが付与されてしまいます。

js

1$(window).on('scroll', function() { 2 add_class_in_scrolling( $('.title') ); 3 add_class_in_scrolling( $('.detail') ); 4}); 5 6// スクロールで要素が表示された時にclassを付与する 7function add_class_in_scrolling( $target ) { 8 var winScroll = $(window).scrollTop();//スクロールの上下位置を取得 9 var winHeight = $(window).height();//ウィンドウの高さを取得 10 var scrollPos = winScroll + winHeight;//上記の合計(スクロールポジション) 11 12 if($target.offset().top < scrollPos) {//classをつけたい要素の上下位置がスクロールポジションより小さい場合=ウィンドウ内に表示された場合 13 $target.addClass('is-show'); 14 } 15}

読み込み時にこれらの同一クラスに番号を振ったらどうかと思ったのですが、スクロール時に表示された要素が何番なのか取得できずにこの方法も見送りました。

js

1$('.I_FrontDesc_title').each(function(n){ 2 $(this).addClass('number-' + n) 3});

どうしたら今回のように同じクラスが複数あるケースでもできるようになりますか?

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

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

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

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

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

yambejp

2020/04/20 04:39

表示されていないときにクラスをはずす意味はあるのでしょうか? ないなら、つねにクラスがつけておけば済むだけでは?
huwatoro

2020/04/20 09:23 編集

is-showでアニメーションをスタートさせたいので…
guest

回答1

0

ベストアンサー

js

1function add_class_in_scrolling( $target ) { 2 var winScroll = $(window).scrollTop();//スクロールの上下位置を取得 3 var winHeight = $(window).height();//ウィンドウの高さを取得 4 var scrollPos = winScroll + winHeight;//上記の合計(スクロールポジション) 5 $target.each(function(){ 6 if($(this).offset().top < scrollPos) { 7 $(this).addClass('is-show'); 8 } 9 }); 10}

投稿2020/04/23 09:41

kei344

総合スコア69398

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

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

huwatoro

2020/04/23 10:04

ありがとうございます!ずっと悩んでおりましたので大変助かりました。$targetは複数わたしつつeachで一つずつ判定すればよかったんですね。本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問