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;