| 9253 | 9253 | } |
| 9254 | 9254 | }); |
| 9255 | 9255 | const chatElementScroll = document.getElementById('chat'); |
| 9256 | 9256 | chatElementScroll.addEventListener('wheel',const chatScrollHandler = function () { |
| 9257 | | - scrollLock = true; |
| 9257 | + const scrollIsAtBottom = Math.abs(chatElementScroll.scrollHeight - chatElementScroll.clientHeight - chatElementScroll.scrollTop) < 1; |
| 9258 | | - }, { passive: true }); |
| 9258 | + |
| 9259 | | - chatElementScroll.addEventListener('touchstart', function () { |
| 9259 | + // Cancel autoscroll if the user scrolls up |
| 9260 | | - scrollLock = true; |
| 9260 | + if (scrollLock && scrollIsAtBottom) { |
| 9261 | | - }, { passive: true }); |
| 9261 | + scrollLock = false; |
| 9262 | + } |
| 9263 | + |
| 9264 | + // Resume autoscroll if the user scrolls to the bottom |
| 9265 | + if (!scrollLock && !scrollIsAtBottom) { |
| 9266 | + scrollLock = true; |
| 9267 | + } |
| 9268 | + }; |
| 9269 | + chatElementScroll.addEventListener('wheel', chatScrollHandler, { passive: true }); |
| 9270 | + chatElementScroll.addEventListener('touchmove', chatScrollHandler, { passive: true }); |
| 9262 | 9271 | chatElementScroll.addEventListener('scroll', function () { |
| 9263 | 9272 | if (is_use_scroll_holder) { |
| 9264 | 9273 | this.scrollTop = scroll_holder; |