回答編集履歴

5

typo

2022/09/30 16:34

投稿

Cocode
Cocode

スコア2314

test CHANGED
@@ -36,7 +36,7 @@
36
36
 
37
37
  - 2つ目の`gazou.classList.add("turn");`(`callback()`関数の中)が、即実行されてしまっている。
38
38
  - なので同じく、ページロードされた瞬間にアニメーションが始まって終了していました。
39
- - オブザーバーは常に要素を監視しているので、**ページロード直後とスクロール時に監視処理が行われる(=コールバック関数が呼ばれる)**ようです。
39
+ - オブザーバーは常に要素を監視しているので、 **ページロード直後とスクロール時に監視処理が行われる(=コールバック関数が呼ばれる)** ようです。
40
40
  - 要素が見える見えない(=エリア内にあるかどうか)は関係ありません。
41
41
  - サンプルページを開いてスクロールさせながら、コンソールを見ていただいたら分かりやすいと思います。
42
42
 

4

Make the conclusion more understandable

2022/09/30 16:33

投稿

Cocode
Cocode

スコア2314

test CHANGED
@@ -36,9 +36,9 @@
36
36
 
37
37
  - 2つ目の`gazou.classList.add("turn");`(`callback()`関数の中)が、即実行されてしまっている。
38
38
  - なので同じく、ページロードされた瞬間にアニメーションが始まって終了していました。
39
- - オブザーバーは常に要素を監視しているので、監視した瞬間にコールバック関数が呼ばれてい感じした
39
+ - オブザーバーは常に要素を監視しているので、**ページロード直後とスクロール時に監視処理が行われる(=コールバック関数が呼ばれる)**よう
40
- - 要素が見える見えないは関係なく、監視した瞬間に作動している感じ
40
+ - 要素が見える見えない(=エリア内にあるかどうか)は関係ありません
41
- - サンプルページの中のコンソールを見ていただいたら分かりやすいと思います。
41
+ - サンプルページを開いてスクロールさせながら、コンソールを見ていただいたら分かりやすいと思います。
42
42
 
43
43
  ### 行った対策
44
44
  - 監視対象が対象エリア(デフォルトのビューポート)に入ったことを検知したら、クラスを付与するという処理にかえました。

3

サンプル差し替え

2022/09/30 16:18

投稿

Cocode
Cocode

スコア2314

test CHANGED
@@ -1,5 +1,5 @@
1
1
  ### 動いたコード
2
- - サンプル https://jsfiddle.net/b6qg3p7s/
2
+ - サンプル https://jsfiddle.net/jk9fqz0h/
3
3
  ```javascript
4
4
  const gazou = document.getElementById("gazou");
5
5
  const options = {
@@ -38,6 +38,7 @@
38
38
  - なので同じく、ページロードされた瞬間にアニメーションが始まって終了していました。
39
39
  - オブザーバーは常に要素を監視しているので、監視した瞬間にコールバック関数が呼ばれている感じでした。
40
40
  - 要素が見える見えないは関係なく、監視した瞬間に作動している感じ。
41
+ - サンプルページの中のコンソールを見ていただいたら分かりやすいと思います。
41
42
 
42
43
  ### 行った対策
43
44
  - 監視対象が対象エリア(デフォルトのビューポート)に入ったことを検知したら、クラスを付与するという処理にかえました。

2

add appendix code

2022/09/30 16:09

投稿

Cocode
Cocode

スコア2314

test CHANGED
@@ -47,3 +47,16 @@
47
47
 
48
48
  - ためしにoptionsで`threshold: [0.2, 1.0]`適当に設定してみたら、うまく動きました!
49
49
 
50
+ ### おまけ:つけたクラスを外す方法
51
+ 要素が見えなくなった時にクラスをはずすこともできます。if文にelse ifを追加したらできます。
52
+
53
+ ```javascript
54
+ // 前略
55
+ if (entry.intersectionRatio === 1) {
56
+ entry.target.classList.add('turn');
57
+ } else if (!entry.isIntersecting) { // 要素が見えなくなる時
58
+ entry.target.classList.remove('turn');
59
+ }
60
+ // 後略
61
+ ```
62
+

1

remove console.log from code

2022/09/30 16:02

投稿

Cocode
Cocode

スコア2314

test CHANGED
@@ -9,7 +9,6 @@
9
9
  observer.observe(gazou);
10
10
 
11
11
  function callback(entries) {
12
- console.log(entries);
13
12
  entries.forEach(entry => {
14
13
  if (entry.intersectionRatio === 1) {
15
14
  entry.target.classList.add('turn');