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

質問編集履歴

4

2019/08/25 07:26

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -54,7 +54,6 @@
54
54
  $.each(data, function(i, data){
55
55
  buildMESSAGE(data); //buildMESSAGEを呼び出す
56
56
 
57
-
58
57
      //****↓質問はこのポイントです。****
59
58
  if ((scrollHeight - scrollPosition) / scrollHeight <= 0) {
60
59
  処理

3

2019/08/25 07:26

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -14,7 +14,7 @@
14
14
  }
15
15
 
16
16
 
17
- **//スクロール検出
17
+ //スクロール検出
18
18
  // スクロールさせる要素を取得
19
19
  var elm = document.getElementById('log');
20
20
 
@@ -31,7 +31,7 @@
31
31
  // どれだけ近づいたかを判断する値
32
32
  // 0に近いほど、スクロールの最終が近い
33
33
  var proximity = 0;
34
- **
34
+
35
35
 
36
36
  $(function(){
37
37
  setInterval(update, 10000);
@@ -56,9 +56,9 @@
56
56
 
57
57
 
58
58
      //****↓質問はこのポイントです。****
59
- ** if ((scrollHeight - scrollPosition) / scrollHeight <= 0) {
59
+ if ((scrollHeight - scrollPosition) / scrollHeight <= 0) {
60
60
  処理
61
- };**
61
+ };
62
62
  });
63
63
  });
64
64
  }

2

修正しました

2019/08/25 07:25

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -11,7 +11,6 @@
11
11
  $(function(){
12
12
  function buildMESSAGE(message) {
13
13
  var messages = $('#log').append('<div class="messages" data-id=' + message.id + '><p>' + message.content + '</p></div>');
14
- //'tbody'に'tr'以下のhtml全てをappendする
15
14
  }
16
15
 
17
16
 
@@ -36,24 +35,23 @@
36
35
 
37
36
  $(function(){
38
37
  setInterval(update, 10000);
39
- //10000ミリ秒ごとにupdateという関数を実行する
40
38
  });
41
- function update(){ //この関数では以下のことを行う
39
+ function update(){
40
+ if($('.messages')[0]){
42
- if($('.messages')[0]){ //もし'messages'というクラスがあったら
41
+ var message_id = $('.messages:last').data('id');
43
- var message_id = $('.messages:last').data('id'); //一番最後にある'messages'というクラスの'id'というデータ属性を取得し、'message_id'という変数に代入
44
- } else { //ない場合は
42
+ } else {
45
- var message_id = 0 //0を代入
43
+ var message_id = 0
46
44
  }
47
- $.ajax({ //ajax通信で以下のことを行う
45
+ $.ajax({
48
- url: location.href, //urlは現在のページを指定
46
+ url: location.href,
49
- type: 'GET', //メソッドを指定
47
+ type: 'GET',
48
+ data: {
50
- data: { //railsに引き渡すデータは
49
+ message: { id: message_id }
51
- message: { id: message_id } //このような形(paramsの形をしています)で、'id'には'message_id'を入れる
52
50
  },
53
- dataType: 'json' //データはjson形式
51
+ dataType: 'json'
54
52
  })
55
- .always(function(data){ //通信したら、成功しようがしまいが受け取ったデータ(@new_message)を引数にとって以下のことを行う
53
+ .always(function(data){
56
- $.each(data, function(i, data){ //'data'を'data'に代入してeachで回す
54
+ $.each(data, function(i, data){
57
55
  buildMESSAGE(data); //buildMESSAGEを呼び出す
58
56
 
59
57
 

1

試したコード書きました

2019/08/25 06:52

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,1 +1,78 @@
1
+ メッセージを受け取り下に追加していくアプリです(Lineのような)
2
+
3
+ ```HTML
4
+ <div id="log">
5
+ ここにメッセージが追加されます。
6
+ </div>
7
+ ```
8
+
9
+ ```javascript
10
+ //自動更新
11
+ $(function(){
12
+ function buildMESSAGE(message) {
13
+ var messages = $('#log').append('<div class="messages" data-id=' + message.id + '><p>' + message.content + '</p></div>');
14
+ //'tbody'に'tr'以下のhtml全てをappendする
15
+ }
16
+
17
+
18
+ **//スクロール検出
19
+ // スクロールさせる要素を取得
20
+ var elm = document.getElementById('log');
21
+
22
+ // 要素の表示領域を取得
23
+ var height = elm.offsetHeight;
24
+ var scrollHeight = elm.scrollHeight;
25
+
26
+ // 要素のスクロール位置を取得
27
+ var scrollTop = elm.scrollTop;
28
+
29
+ // 現在の表示位置の高さ
30
+ var scrollPosition = height + scrollTop;
31
+
32
+ // どれだけ近づいたかを判断する値
33
+ // 0に近いほど、スクロールの最終が近い
34
+ var proximity = 0;
35
+ **
36
+
37
+ $(function(){
38
+ setInterval(update, 10000);
39
+ //10000ミリ秒ごとにupdateという関数を実行する
40
+ });
41
+ function update(){ //この関数では以下のことを行う
42
+ if($('.messages')[0]){ //もし'messages'というクラスがあったら
43
+ var message_id = $('.messages:last').data('id'); //一番最後にある'messages'というクラスの'id'というデータ属性を取得し、'message_id'という変数に代入
44
+ } else { //ない場合は
45
+ var message_id = 0 //0を代入
46
+ }
47
+ $.ajax({ //ajax通信で以下のことを行う
48
+ url: location.href, //urlは現在のページを指定
49
+ type: 'GET', //メソッドを指定
50
+ data: { //railsに引き渡すデータは
51
+ message: { id: message_id } //このような形(paramsの形をしています)で、'id'には'message_id'を入れる
52
+ },
53
+ dataType: 'json' //データはjson形式
54
+ })
55
+ .always(function(data){ //通信したら、成功しようがしまいが受け取ったデータ(@new_message)を引数にとって以下のことを行う
56
+ $.each(data, function(i, data){ //'data'を'data'に代入してeachで回す
57
+ buildMESSAGE(data); //buildMESSAGEを呼び出す
58
+
59
+
60
+     //****↓質問はこのポイントです。****
61
+ ** if ((scrollHeight - scrollPosition) / scrollHeight <= 0) {
62
+ 処理
63
+ };**
64
+ });
65
+ });
66
+ }
67
+ });
68
+ ```
69
+ 質問したい所は、ajaxでメッセージを受信した時の処理です。
70
+ if文分岐したいのですが、
71
+ 一番下にスクロールバーがある状態でメッセージを受け取ったら処理をする。
72
+ それ以外なら処理は行わない としたいのですが、if文が間違っているのか、
73
+ どの位置にスクロールバーがあっても処理が行われてしまいます。
74
+
75
+ スクロールバーの位置の取得が間違っているのかと思われるのですが、
76
+ 調べ試したのですが全く同じでどの状況でも処理されてしまいました。
77
+
1
- javascriptでページの下からの位置を取得する方法を教えてください。
78
+ 正しいjavascriptでページの下からの位置を取得する方法を教えてください。