summaryrefslogtreecommitdiff
path: root/app/javascript
diff options
context:
space:
mode:
authorDavid Gay <david@davidgay.org>2021-06-09 21:49:46 -0400
committerDavid Gay <david@davidgay.org>2021-06-09 21:49:51 -0400
commit779f19c5b35f7c8c7690dac9fbf4606f49cfffde (patch)
tree115131c535b3b2577e2f92eb1e914d79a17feb6b /app/javascript
parent40db33e9789f85b55bdf3dc02fe6c6a7547a2378 (diff)
Only scroll chat and results output to the bottom on new content when already scrolled to the bottom or near the bottom
Diffstat (limited to 'app/javascript')
-rw-r--r--app/javascript/channels/chat_room_channel.js10
-rw-r--r--app/javascript/controllers/chat_controller.js9
2 files changed, 7 insertions, 12 deletions
diff --git a/app/javascript/channels/chat_room_channel.js b/app/javascript/channels/chat_room_channel.js
index 8dfa47f..af29953 100644
--- a/app/javascript/channels/chat_room_channel.js
+++ b/app/javascript/channels/chat_room_channel.js
@@ -15,8 +15,12 @@ consumer.subscriptions.create("ChatRoomChannel", {
node.innerHTML = data.html;
var chatOutputElement = document.getElementById("chat_output");
chatOutputElement.appendChild(node);
- chatOutputElement.scrollTo({
- top: chatOutputElement.scrollHeight, left: 0, behavior: 'smooth'
- });
+
+ // If scrolled to the bottom or near the bottom, then smooth scroll to the bottom.
+ if ((chatOutputElement.scrollTop + 100) >= (chatOutputElement.scrollHeight - chatOutputElement.offsetHeight)) {
+ chatOutputElement.scrollTo({
+ top: chatOutputElement.scrollHeight, left: 0, behavior: 'smooth'
+ });
+ }
}
});
diff --git a/app/javascript/controllers/chat_controller.js b/app/javascript/controllers/chat_controller.js
index d9cf1cb..95b61c5 100644
--- a/app/javascript/controllers/chat_controller.js
+++ b/app/javascript/controllers/chat_controller.js
@@ -12,7 +12,6 @@ export default class extends Controller {
// TODO: Temporary hack. Should just run this after default event.
setTimeout(function() {
vm.messageTarget.value = "";
- vm.smoothScrollToBottom();
}, 100);
}
@@ -31,12 +30,4 @@ export default class extends Controller {
scrollToBottom() {
this.outputTarget.scrollTop = this.outputTarget.scrollHeight;
}
-
- smoothScrollToBottom() {
- this.outputTarget.scrollTo({
- top: this.outputTarget.scrollHeight,
- left: 0,
- behavior: 'smooth'
- });
- }
}