From 12f6e5069d513f16083b918dcce409e6a8917195 Mon Sep 17 00:00:00 2001 From: Cohee <18619528+Cohee1207@users.noreply.github.com> Date: Mon, 22 Jul 2024 23:07:51 +0300 Subject: [PATCH] Improve auto-scroll snapping --- public/script.js | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/public/script.js b/public/script.js index 3607eca78..091ac68f9 100644 --- a/public/script.js +++ b/public/script.js @@ -9253,12 +9253,21 @@ jQuery(async function () { } }); const chatElementScroll = document.getElementById('chat'); - chatElementScroll.addEventListener('wheel', function () { - scrollLock = true; - }, { passive: true }); - chatElementScroll.addEventListener('touchstart', function () { - scrollLock = true; - }, { passive: true }); + const chatScrollHandler = function () { + const scrollIsAtBottom = Math.abs(chatElementScroll.scrollHeight - chatElementScroll.clientHeight - chatElementScroll.scrollTop) < 1; + + // Cancel autoscroll if the user scrolls up + if (scrollLock && scrollIsAtBottom) { + scrollLock = false; + } + + // Resume autoscroll if the user scrolls to the bottom + if (!scrollLock && !scrollIsAtBottom) { + scrollLock = true; + } + }; + chatElementScroll.addEventListener('wheel', chatScrollHandler, { passive: true }); + chatElementScroll.addEventListener('touchmove', chatScrollHandler, { passive: true }); chatElementScroll.addEventListener('scroll', function () { if (is_use_scroll_holder) { this.scrollTop = scroll_holder;