teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

慣性スクロールについて追記

2019/12/17 03:52

投稿

Ibuki90
Ibuki90

スコア8

title CHANGED
File without changes
body CHANGED
@@ -56,4 +56,8 @@
56
56
  };
57
57
  });
58
58
  });
59
- ```
59
+ ```
60
+
61
+ 追記です。
62
+
63
+ iOS13から慣性スクロールがデフォルトで有効になっていて、無効にできなくなっているようです。無効にできれば早いんですが。

2

誤解された部分を修正

2019/12/17 03:52

投稿

Ibuki90
Ibuki90

スコア8

title CHANGED
File without changes
body CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
  スクロールして上から200pxを超えると、その上部に要素を追加します。
16
16
  その際、要素追加前に位置を記録し、追加後に追加された高さ分スクロールした位置にスクロールを移動させています。
17
- ただ、iosでは慣性スクロールの影響か、慣性スクロールが止まるまでスクロール位置が移動してくれません。そのため、要素の追加が大量に発火してしまいます。
17
+ ただ、iosでは慣性スクロールの影響か、慣性スクロールが止まるまでスクロール位置が移動してくれません。
18
18
 
19
19
  ライブラリでも実装でも何でも良いので、解決策があれば教えていただけないでしょうか。よろしくお願いします。
20
20
 

1

コードを質問本文に記載

2019/12/16 08:25

投稿

Ibuki90
Ibuki90

スコア8

title CHANGED
File without changes
body CHANGED
@@ -16,4 +16,44 @@
16
16
  その際、要素追加前に位置を記録し、追加後に追加された高さ分スクロールした位置にスクロールを移動させています。
17
17
  ただ、iosでは慣性スクロールの影響か、慣性スクロールが止まるまでスクロール位置が移動してくれません。そのため、要素の追加が大量に発火してしまいます。
18
18
 
19
- ライブラリでも実装でも何でも良いので、解決策があれば教えていただけないでしょうか。よろしくお願いします。
19
+ ライブラリでも実装でも何でも良いので、解決策があれば教えていただけないでしょうか。よろしくお願いします。
20
+
21
+ 指摘がありましたので、CodePen内のコードを以下にも記載します。
22
+
23
+ ```html
24
+ <div class="posts"></div>
25
+ ```
26
+
27
+ ```js
28
+ function postEl(text) {
29
+ return `<div>${text}</div>`;
30
+ }
31
+
32
+ function setupInitialPosts() {
33
+ [...Array(100).keys()].forEach(i => {
34
+ const text = `post${i}`
35
+ $('.posts').append(postEl(text));
36
+ });
37
+ $(document).scrollTop(1000);
38
+ }
39
+
40
+ $(() => {
41
+ setupInitialPosts();
42
+
43
+ let prependedCount = 0;
44
+ $(document).scroll(() => {
45
+ if($(document).scrollTop() < 200) {
46
+ const beforeUpdatingScrollTop = $(document).scrollTop();
47
+ [...Array(10).keys()].forEach(i => {
48
+ const text = `prependPost${prependedCount * 10 + i}`;
49
+ $('.posts').prepend(postEl(text));
50
+ });
51
+ prependedCount++;
52
+
53
+ const elements = $('.posts div');
54
+ const movedScroll = elements[10].offsetTop - elements[0].offsetTop;
55
+ $(document).scrollTop(beforeUpdatingScrollTop + movedScroll);
56
+ };
57
+ });
58
+ });
59
+ ```