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

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

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

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

スクロール

スクロールとは、ディスプレイスクリーン上において連続的にコンテンツが滑っていくことを指します。

Q&A

解決済

1回答

1403閲覧

新規投稿時、メッセージ画面を最下部にスクロールする挙動が思う様にいきません

harabou

総合スコア5

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

スクロール

スクロールとは、ディスプレイスクリーン上において連続的にコンテンツが滑っていくことを指します。

0グッド

0クリップ

投稿2020/01/24 11:46

編集2020/01/24 15:47

###解決したいこと
新規投稿時にメッセージ画面を最下部にスクロールしたいです。

###詳細
rubyでチャット機能をもつwebアプリケーションを作っています。

js

1$(function() { 2 3 function buildHTML(message){ 4 5 image = (message.image) ? `<img class= "lower-message__image" src=${message.image} >`:""; 6 7~~中略〜〜 8 $('.messages').append(insertHTML); 9 $('.messages').animate({ scrollTop: $('.messages')[0].scrollHeight},'fast'); 10 $("#new_message")[0].reset(); 11 $(".form__submit").prop("disabled", false); 12 } 13 }) 14 .fail(function() { 15 alert ('メッセージ送信に失敗しました'); 16 }); 17 } 18 if (document.location.href.match(//groups/\d+/messages/)) { 19 setInterval(reloadMessages, 7000); 20 } 21});

追記
該当するview

haml

1.message{"data-message-id": "#{message.id}"} 2 .message-list__top 3 .message-list__top__name 4 = message.user.name 5 .message-list__top__date 6 = message.created_at.strftime("%Y年%m月%d日 %H時%M分") 7 .message-list__message 8 - if message.content.present? 9 %p.lower-message__content 10 = message.content 11 = image_tag message.image.url, class: 'lower-message__image' if message.image.present?

haml

1~~~~ 2 .messages 3 = render @messages 4 5~~~~

###対策
何度も見直してググっても出てきませんでした。

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

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

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

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

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

winterboum

2020/01/24 12:13

viewも載せてください
harabou

2020/01/24 12:29

追記しました! よろしくお願いします!
oikashinoa

2020/01/24 23:01

> メッセージ画面を最下部にスクロールする挙動が思う様にいきません どんな動きになってますか?ソースなどを中略してるので、他人には再現できないです。 今の動きを質問文修正して追記したら回答付くと思いますよ。 例:新規投稿時にメッセージ画面を最下部にスクロールしたいですが、今はメッセージ最上部にスクロールしてしまいます。
guest

回答1

0

自己解決

Javascriptで同期から非同期にコードを打つ際同期ぶんも消していたのが原因でした。
質問の仕方を教えて下さったみなさま。
ありがとうございます!

javascript

1 2 $('.new_message').on('submit', function(e){ 3 e.preventDefault(); 4 var formData = new FormData(this); 5 var url = $(this).attr('action') 6 7 $.ajax({ 8 url: url, 9 type: "POST", 10 data: formData, 11 dataType: 'json', 12 processData: false, 13 contentType: false 14 }) 15 .done(function(data){ 16 buildHTML(data); 17 $('.messages').animate({scrollTop: $('.messages')[0].scrollHeight}, 'fast'); 18 $('form')[0].reset(); 19 }) 20 .fail(function(){ 21 alert('投稿に失敗しました'); 22 }) 23 }) 24 25 26 var reloadMessages = function () { 27 last_message_id = $('.message:last').data("message-id"); 28 $.ajax({ 29 url: "api/messages", 30 type: 'get', 31 dataType: 'json', 32 data: {id: last_message_id} 33 }) 34 .done(function(messages){ 35 if ('messages'.length !== 0) { 36 var insertHTML = ''; 37 $.each(messages, function(i, message) { 38 insertHTML += buildHTML(message) 39 }); 40 $('.messages').append(insertHTML); 41 $('.messages').animate({ scrollTop: $('.messages')[0].scrollHeight},'fast'); 42 $(".form__submit").prop("disabled", false); 43 } 44 }) 45 .fail(function() { 46 alert ('メッセージ送信に失敗しました'); 47 }); 48 } 49 if (document.location.href.match(//groups/\d+/messages/)) { 50 setInterval(reloadMessages, 7000); 51 } 52}); 53

投稿2020/01/26 09:29

harabou

総合スコア5

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問