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

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

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

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

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

1回答

819閲覧

javascriptのajax通信時の条件分岐

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

1クリップ

投稿2019/08/24 19:35

編集2019/08/24 19:39

Rails でLINEの様なメッセージアプリを使っています。
メッセージ受信時に
①もし一番下にスクロールバーがあるなら、下にスクロールしたい
②一番下でないなら、メッセージを受信しましたという信号(LINEの様な感じ)をユーザーに送りたい
と考えています。

javascript

1// スクロールさせる要素を取得 2var elm = document.getElementById('scrollElement'); 3 4// 要素の表示領域を取得 5var height = elm.offsetHeight; 6 7// スクロールイベントを定義 8elm.onscroll = function() { 9 // 要素のスクロール分を含めた高さを取得 10 var scrollHeight = elm.scrollHeight; 11 12 // 要素のスクロール位置を取得 13 var scrollTop = elm.scrollTop; 14 15 // 現在の表示位置の高さ 16 var scrollPosition = height + scrollTop; 17 18 // どれだけ近づいたかを判断する値 19 // 0に近いほど、スクロールの最終が近い 20 var proximity = 0; 21 22 if ((scrollHeight - scrollPosition) / scrollHeight <= proximity) { 23 スクロール処理 24 } 25}

このif文をajax受信時に入れたのですが、どの位置でもスクロールされてしまいます。
ajax受信時に、条件分岐させるにはどの様にしたら良いのでしょうか?

ユーザーへのメッセージ受信の信号については、まだ全く分かりません。
分かれば教えて頂けると助かります。
下手な質問かもしれませんが、よろしくお願いします。

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

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

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

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

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

Lhankor_Mhy

2019/08/27 01:13

スクロールイベントにハンドラを設定しているのは、どのような意図ですか? 個人的には、 通信終了→スクロール位置を検出→分岐してスクロールor通知表示 という処理になり、スクロールイベントが不要のように感じます。
guest

回答1

0

以下の計算式がおかしいです。
その計算式では、scrollHeightからoffsetHeightを引いて更に、scrollTopを引くことになってしまいます。それでは、ほとんどの場合において、マイナスになってしまうでしょう。

javascript

1 if ((scrollHeight - scrollPosition) / scrollHeight <= proximity) { 2 スクロール処理 3 }

本来、スクロールが一番下に来ているかどうかを判定したい場合、「scrollHeight - scrollTop」
思い浮かびますが、scrollTopはscrollHeightと同じになることがありません。

何故なら、スクロールを含めた高さが2000、画面で表示している範囲が1500-2000の部分の場合、scrollTopは1500を示すからです。ならば、画面で表示している高さを更に引いてあげればいいことに気づくでしょう。

つまり、スクロールが最も下の位置に来ているかは以下の式で判定できます。

javascript

1 if ((elm.scrollHeight - elm.scrollTop - elm.clientHeight) <= 0) { 2 // スクロール処理 3 }

投稿2019/09/13 06:06

LineOfLightning

総合スコア253

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問