質問編集履歴

1

過去に似た質問があったので、それを参考にしつつコードを変更しました。 https://teratail.com/questions/254960

2021/12/29 03:09

投稿

sucota
sucota

スコア1

test CHANGED
File without changes
test CHANGED
@@ -16,6 +16,32 @@
16
16
 
17
17
  これを、セクションが増えても記述しなくても大丈夫なようにしたい。
18
18
 
19
+ ⇒ これは解決
20
+
21
+
22
+
23
+ 別の問題が発生して解決できません
24
+
25
+
26
+
27
+ sectionに入るごとに、
28
+
29
+ number-1 number-2 number-3・・・
30
+
31
+ と付くようにはなりました。
32
+
33
+ やりたいことは、ここから、例えば、sectionの2つ目の時は、
34
+
35
+ number-2のみのclassが付与されるようにしたいです。
36
+
37
+ 今だと、number-1 number-2の様に複数付いてしまいます。
38
+
39
+
40
+
41
+ このコードからどう変更すればいいでしょうか?
42
+
43
+
44
+
19
45
 
20
46
 
21
47
  ### 該当のソースコード
@@ -26,35 +52,29 @@
26
52
 
27
53
  ```
28
54
 
29
- <div class="section section1">
55
+ <section>
30
56
 
31
- <div class="section-content">セクション1</div>
57
+ title
32
58
 
33
- </div>
59
+ detail
34
60
 
35
- <div class="section section2 target-area2">
61
+ </section>
36
62
 
37
- <div class="section-content">セクション2</div>
63
+ <section>
38
64
 
39
- </div>
65
+ title
40
66
 
41
- <div class="section section3 target-area3">
67
+ detail
42
68
 
43
- <div class="section-content">セクション3</div>
69
+ </section>
44
70
 
45
- </div>
71
+ <section>
46
72
 
47
- <div class="section section4">
73
+ title
48
74
 
49
- <div class="section-content">セクション4</div>
75
+ detail
50
76
 
51
- </div>
77
+ </section>
52
-
53
- <div class="section section5">
54
-
55
- <div class="section-content">セクション5</div>
56
-
57
- </div>
58
78
 
59
79
  ```
60
80
 
@@ -62,49 +82,39 @@
62
82
 
63
83
  ```
64
84
 
65
- jQuery(window).scroll(function() {
85
+ $(window).on('scroll', function() {
86
+
87
+ add_class_in_scrolling( $('section') );
88
+
89
+ });
66
90
 
67
91
 
68
92
 
69
- let scrollTop2 = jQuery(window).scrollTop(); // スクロール上部の位置
93
+ function add_class_in_scrolling( $target ) {
70
94
 
71
- let areaTop2 = jQuery(".target-area2").offset().top; // 対象エリアの上部の位置
95
+ var winScroll = $(window).scrollTop();//スクロールの上位置を取得
72
96
 
73
- let areaBottom2 = areaTop2 + jQuery(".target-area2").innerHeight(); // 対象エリア下部の位置
97
+ var winHeight = $(window).height();//ウィンドウ高さを取得
74
98
 
99
+ var scrollPos = winScroll + winHeight;//上記の合計(スクロールポジション)
75
100
 
101
+ $target.each(function(i){
76
102
 
77
- if (scrollTop2 > areaTop2 && scrollTop2 < areaBottom2) {
103
+ if($(this).offset().top < scrollPos) {
78
104
 
79
- jQuery("body").addClass("is-in2"); // スクロールが対象エリアに入った場合
105
+ $("body").addClass('number-' + (i+1)); // スクロールが対象エリアに入った場合
80
106
 
81
- } else {
107
+ }
82
108
 
83
- jQuery("body").removeClass("is-in2"); // スクロールが対象エリアから出ている場合
109
+ else {
84
110
 
85
- }
111
+ $("body").removeClass('number-' + (i+1));// スクロールが対象エリアから出ている場合
86
112
 
87
-
88
-
89
- let scrollTop3 = jQuery(window).scrollTop(); // スクロール上部の位置
90
-
91
- let areaTop3 = jQuery(".target-area3").offset().top; // 対象エリアの上部の位置
92
-
93
- let areaBottom3 = areaTop3 + jQuery(".target-area3").innerHeight(); // 対象エリアの下部の位置
94
-
95
-
96
-
97
- if (scrollTop3 > areaTop3 && scrollTop3 < areaBottom3) {
98
-
99
- jQuery("body").addClass("is-in3"); // スクロールが対象エリアに入った場合
100
-
101
- } else {
102
-
103
- jQuery("body").removeClass("is-in3"); // スクロールが対象エリアから出ている場合
104
-
105
- }
113
+ }
106
114
 
107
115
  });
116
+
117
+ }
108
118
 
109
119
  ```
110
120