質問編集履歴

2

言語に関するマークアップを修正

2020/08/26 00:34

投稿

sumrin
sumrin

スコア24

test CHANGED
File without changes
test CHANGED
@@ -16,9 +16,7 @@
16
16
 
17
17
 
18
18
 
19
- HTML
19
+ ```HTML
20
-
21
- ```
22
20
 
23
21
  <div id="elemB">要素B</div>
24
22
 
@@ -26,9 +24,7 @@
26
24
 
27
25
 
28
26
 
29
- CSS
27
+ ```CSS
30
-
31
- ```
32
28
 
33
29
  #elemB {
34
30
 
@@ -76,7 +72,7 @@
76
72
 
77
73
 
78
74
 
79
- ```
75
+ ```JavaScript
80
76
 
81
77
  const elemB = document.querySelectorAll("#elemB");
82
78
 

1

表記ゆれを修正。JSコードを追加

2020/08/26 00:34

投稿

sumrin
sumrin

スコア24

test CHANGED
File without changes
test CHANGED
@@ -2,9 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- 要素A(body内に1つのみ)が可視領域に入ったら要素Bに対してclassを付与し、
5
+ 要素A(body内に1つのみ)が可視領域に入ったら要素Bに対してclassを付与し、可視領域から外れたらclassを外す」ことを実現したいです。
6
-
7
- 可視領域から外れたらクラスを外すということを実現したいです。
8
6
 
9
7
 
10
8
 
@@ -54,7 +52,13 @@
54
52
 
55
53
  `.is-active`という要素を可視状態にするユーティリティクラスを用意しており、
56
54
 
57
- 上図の②で`#elemB`対して`.is-active`を付与④の状態で`.is-active`を剥奪したいです。
55
+ 以下ように`.is-active`の与奪行うことで、`#elemB`の表示/非表示切り替えたいです。
56
+
57
+
58
+
59
+ - 要素Bが画面内に入った場合(上図①→② or ④→③):`.is-active`の付与
60
+
61
+ - 要素Bが画面外に出た場合(上図②→① or ③→④):`.is-active`の剥奪
58
62
 
59
63
 
60
64
 
@@ -72,6 +76,60 @@
72
76
 
73
77
 
74
78
 
79
+ ```
80
+
81
+ const elemB = document.querySelectorAll("#elemB");
82
+
83
+
84
+
85
+ const options = {
86
+
87
+ root: null,
88
+
89
+ rootMargin: "-100% 0px 0px 0px",
90
+
91
+ threshold: 0
92
+
93
+ };
94
+
95
+ const observer = new IntersectionObserver(doWhenIntersect, options);
96
+
97
+ elemB.forEach(entries => {
98
+
99
+ observer.observe(entries);
100
+
101
+ });
102
+
103
+
104
+
105
+ function doWhenIntersect(entries) {
106
+
107
+ entries.forEach(entry => {
108
+
109
+ if (entry.isIntersecting) {
110
+
111
+ activateIndex(entry.target);
112
+
113
+ }
114
+
115
+ });
116
+
117
+ }
118
+
119
+
120
+
121
+ function activateIndex(element) {
122
+
123
+  (略)
124
+
125
+ }
126
+
127
+ ```
128
+
129
+ ※参考:[JSでのスクロール連動エフェクトにはIntersection Observerが便利 - ICS MEDIA](https://ics.media/entry/190902/)
130
+
131
+
132
+
75
133
  - 要素Bが画面内に入った場合(上図①→② or ④→③):コールバックがあるのでクラスの付与が可能
76
134
 
77
135
  - 要素Bが画面外に出た場合(上図②→① or ③→④):コールバックがなく、**クラスの剥奪が機能しない**