質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

1731閲覧

javascript スクロール 下からの位置を取得する方法

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2019/08/25 04:31

編集2019/08/25 07:26

メッセージを受け取り下に追加していくアプリです(Lineのような)

HTML

1<div id="log"> 2ここにメッセージが追加されます。 3</div>

javascript

1//自動更新 2$(function(){ 3 function buildMESSAGE(message) { 4 var messages = $('#log').append('<div class="messages" data-id=' + message.id + '><p>' + message.content + '</p></div>'); 5 } 6 7 8 //スクロール検出 9 // スクロールさせる要素を取得 10 var elm = document.getElementById('log'); 11 12 // 要素の表示領域を取得 13 var height = elm.offsetHeight; 14 var scrollHeight = elm.scrollHeight; 15 16 // 要素のスクロール位置を取得 17 var scrollTop = elm.scrollTop; 18 19 // 現在の表示位置の高さ 20 var scrollPosition = height + scrollTop; 21 22 // どれだけ近づいたかを判断する値 23 // 0に近いほど、スクロールの最終が近い 24 var proximity = 0; 25 26 27 $(function(){ 28 setInterval(update, 10000); 29 }); 30 function update(){ 31 if($('.messages')[0]){ 32 var message_id = $('.messages:last').data('id'); 33 } else { 34 var message_id = 0 35 } 36 $.ajax({ 37 url: location.href, 38 type: 'GET', 39 data: { 40 message: { id: message_id } 41 }, 42 dataType: 'json' 43 }) 44 .always(function(data){ 45 $.each(data, function(i, data){ 46 buildMESSAGE(data); //buildMESSAGEを呼び出す 47 48    //****↓質問はこのポイントです。**** 49 if ((scrollHeight - scrollPosition) / scrollHeight <= 0) { 50 処理 51 }; 52 }); 53 }); 54 } 55});

質問したい所は、ajaxでメッセージを受信した時の処理です。
if文分岐したいのですが、
一番下にスクロールバーがある状態でメッセージを受け取ったら処理をする。
それ以外なら処理は行わない としたいのですが、if文が間違っているのか、
どの位置にスクロールバーがあっても処理が行われてしまいます。

スクロールバーの位置の取得が間違っているのかと思われるのですが、
調べ試したのですが全く同じでどの状況でも処理されてしまいました。

正しいjavascriptでページの下からの位置を取得する方法を教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/08/25 06:19

調べ方次第で幾らでもヒントは見つかるかと思います。調べて試したことを記載してください
yasutomi

2019/08/25 07:21

コード内に**があると動作しないので 正しく動作するコードの記載をお願いします。
guest

回答2

0

ベストアンサー

スクロール状況は変化するのでその都度取り直さないといけません。

JavaScript

1 var isBottom = elm.scrollHeight - elm.clientHeight - elm.scrollTop < 1;

buildMESSAGE(data); でコンテンツを追加しているのであれば、スクロールバーが一番下に来ることはないのではないでしょうか?
そうであればチェックのタイミングは $.each() よりも前ということになります。
コンテンツ追加のためだけに ajax を使っているのであれば、無駄な通信をしないためにもその前にチェックしてもいいかもしれません。

投稿2019/08/29 04:12

x_x

総合スコア13749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

DOM要素から取得する場合、次のリンク先の情報が役立ちそうです。

Qiita - 結局「下からのスクロール位置」を取得するにはどうすればいいのか (@hoto17296)

js

function getScrollBottom() {
var body = window.document.body;
var html = window.document.documentElement;
var scrollTop = body.scrollTop || html.scrollTop;
return html.scrollHeight - html.clientHeight - scrollTop;
}

投稿2019/08/27 14:19

編集2019/08/27 14:22
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問