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

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

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

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

jQuery

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

Q&A

1回答

701閲覧

スマートな書き方を教えてください。

sucota

総合スコア1

JavaScript

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

jQuery

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

0グッド

1クリップ

投稿2021/12/26 11:12

編集2021/12/29 03:09

前提・実現したいこと

まだまだ初心者なんですが、
何回も同じ記述をしなくてもいいようにコードを書きたい。

発生している問題・エラーメッセージ

今だとセクションが増えるごとに(セクション1、セクション2・・・)コードを記述しないといけないが、
これを、セクションが増えても記述しなくても大丈夫なようにしたい。
⇒ これは解決

別の問題が発生して解決できません

sectionに入るごとに、
number-1 number-2 number-3・・・
と付くようにはなりました。
やりたいことは、ここから、例えば、sectionの2つ目の時は、
number-2のみのclassが付与されるようにしたいです。
今だと、number-1 number-2の様に複数付いてしまいます。

このコードからどう変更すればいいでしょうか?

該当のソースコード

HTML

<section> title detail </section> <section> title detail </section> <section> title detail </section>

javascript(jQuery)

$(window).on('scroll', function() { add_class_in_scrolling( $('section') ); }); function add_class_in_scrolling( $target ) { var winScroll = $(window).scrollTop();//スクロールの上下位置を取得 var winHeight = $(window).height();//ウィンドウの高さを取得 var scrollPos = winScroll + winHeight;//上記の合計(スクロールポジション) $target.each(function(i){ if($(this).offset().top < scrollPos) { $("body").addClass('number-' + (i+1)); // スクロールが対象エリアに入った場合 } else { $("body").removeClass('number-' + (i+1));// スクロールが対象エリアから出ている場合 } }); }

ご教授お願いします。

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

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

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

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

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

guest

回答1

0

今のところ、2と3だけが違うので、その部分だけ変数で受け取って文字列連結して処理するメソッド作ったら良いと思います。

こんな感じ(一部だけなのであとは自身で埋めてください。

js

1 2function setScroll(num){ 3 4 let areaTop = jQuery(".target-area"+num).offset().top; // 対象エリアの上部の位置 5} 6//別で使うことないなら変数名は同じで問題ない認識。要件次第

投稿2021/12/26 11:17

編集2021/12/26 11:42
m.ts10806

総合スコア80875

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

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

m.ts10806

2021/12/26 11:44

法則が今ひとつ見えてませんが、おなじクラスを振っておき「配下の(findとか使うと良い)」を指定するのも出来なくはないです。
sucota

2021/12/26 11:44

こうでしょうか? これでも上手くいかずでしたが・・。 もう少し教えていただけると幸いです。 HTML ``` <div class="section section1"> <div class="section-content target-area">セクション1</div> </div> <div class="section section2 target-area"> <div class="section-content">セクション2</div> </div> <div class="section section3 target-area"> <div class="section-content">セクション3</div> </div> <div class="section section4 target-area"> <div class="section-content">セクション4</div> </div> <div class="section section5 target-area"> <div class="section-content">セクション5</div> </div> ``` javascript ``` jQuery(window).scroll(function() { function setScroll(num){ let scrollTop = jQuery(window).scrollTop(); // スクロール上部の位置 let areaTop = jQuery(".target-area"+num).offset().top; // 対象エリアの上部の位置 let areaBottom = areaTop + jQuery(".target-area"+num).innerHeight(); // 対象エリアの下部の位置 if (scrollTop > areaTop && scrollTop < areaBottom) { jQuery("body").addClass("is-in"+num); // スクロールが対象エリアに入った場合 } else { jQuery("body").addClass("is-in"+num); // スクロールが対象エリアから出ている場合 } }; }); ```
m.ts10806

2021/12/26 20:07

setScroll()がどこからも呼ばれてません。
sucota

2021/12/27 12:34

こうでしょうか? これでも上手くいかず、もう少しご教授いただけますでしょうか? function setScroll(num){ let scrollTop = jQuery(window).scrollTop(); // スクロール上部の位置 let areaTop = jQuery(".target-area"+num).offset().top; // 対象エリアの上部の位置 let areaBottom = areaTop + jQuery(".target-area"+num).innerHeight(); // 対象エリアの下部の位置 if (scrollTop > areaTop && scrollTop < areaBottom) { jQuery("body").addClass("is-in"+num); // スクロールが対象エリアに入った場合 } else { jQuery("body").addClass("is-in"+num); // スクロールが対象エリアから出ている場合 } };
m.ts10806

2021/12/27 20:38 編集

「上手くいかず」では何がどうなっているのやら分かりません。 コード全体を質問本文に提示いただけますか?
sucota

2021/12/28 12:16

過去に似た質問があったので、それを参考にしつつコードを変更しました。 https://teratail.com/questions/254960 sectionに入るごとに、 number-1 number-2 number-3・・・ と付くようにはなりました。 やりたいことは、ここから、例えば、sectionの2つ目の時は、 number-2のみのclassが付与されるようにしたいです。 今だと、number-1 number-2の様に複数付いてしまいます。 このコードからどう変更すればいいでしょうか? HTML <section> title detail </section> <section> title detail </section> <section> title detail </section> javascript $(window).on('scroll', function() { add_class_in_scrolling( $('section') ); }); function add_class_in_scrolling( $target ) { var winScroll = $(window).scrollTop();//スクロールの上下位置を取得 var winHeight = $(window).height();//ウィンドウの高さを取得 var scrollPos = winScroll + winHeight;//上記の合計(スクロールポジション) $target.each(function(i){ if($(this).offset().top < scrollPos) { $("body").addClass('number-' + (i+1)); // スクロールが対象エリアに入った場合 } else { $("body").removeClass('number-' + (i+1));// スクロールが対象エリアから出ている場合 } }); }
m.ts10806

2021/12/28 22:38

コード全体を質問本文に提示いただけますか?
sucota

2021/12/29 03:10

質問本文を修正いたしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問