Я создаю интерфейс чата, в котором ответы ИИ передаются частями (аналогично ChatGPT). Текущая реализация автоматически прокручивается вниз по мере поступления каждого фрагмента, что работает хорошо. Однако, если пользователь пытается прокрутить вверх, чтобы прочитать предыдущий контент, пока поток все еще поступает, автоматическая прокрутка заставляет его вернуться вниз, что делает невозможным чтение предыдущих сообщений.
Что мне нужно, так это то, что когда пользователь вручную прокручивает вверх во время потоковой передачи, я хочу приостановить функцию автоматической прокрутки. Когда они прокрутят обратно вниз, автоматическая прокрутка должна возобновиться.
Вот мой текущий код управления потоковой передачей и прокруткой:
Проблема: блок requestAnimationFrame принудительно прокручивает каждый полученный фрагмент. Когда пользователь вручную прокручивает вверх, чтобы прочитать предыдущий контент, его немедленно перетаскивают обратно вниз. Что я ищу:
Способ определить, когда пользователь вручную прокрутил нижнюю часть
Чистый способ приостановить автоматическую прокрутку, когда он это сделает
Возобновить автоматическая прокрутка, когда они возвращаются вниз.
Обработка сценариев прокрутки как на настольном компьютере, так и на мобильных устройствах.
Я создаю интерфейс чата, в котором ответы ИИ передаются частями (аналогично ChatGPT). Текущая реализация автоматически прокручивается вниз по мере поступления каждого фрагмента, что работает хорошо. Однако, если пользователь пытается прокрутить вверх, чтобы прочитать предыдущий контент, пока поток все еще поступает, автоматическая прокрутка заставляет его вернуться вниз, что делает невозможным чтение предыдущих сообщений. Что мне нужно, так это то, что когда пользователь вручную прокручивает вверх во время потоковой передачи, я хочу приостановить функцию автоматической прокрутки. Когда они прокрутят обратно вниз, автоматическая прокрутка должна возобновиться. Вот мой текущий код управления потоковой передачей и прокруткой: [code]// Streaming function that processes chunks function sendStreamingRequest(question, country, conversationHistory) { console.log('🚀 Starting STREAMING request...');
// Create AbortController for this request currentController = new AbortController();
// PROBLEM: This forces scroll on every chunk requestAnimationFrame(() => { // Scroll the chat messages container to absolute bottom chatMessages.scrollTop = chatMessages.scrollHeight;
// Scroll the main chat container to absolute bottom const chatContainer = document.getElementById('chat-container'); chatContainer.scrollTop = chatContainer.scrollHeight;
// Scroll to the streaming cursor const cursor = assistantMessageDiv.querySelector('.streaming-cursor'); if (cursor) { cursor.scrollIntoView({ behavior: 'instant', block: 'nearest' }); }
// Force scroll the page to show the bottom input if it exists const bottomInput = document.getElementById('input-container-bottom'); if (bottomInput && bottomInput.style.display !== 'none') { window.scrollTo({ top: document.documentElement.scrollHeight, behavior: 'instant' }); } });
[/code] [b]Проблема[/b]: блок requestAnimationFrame принудительно прокручивает каждый полученный фрагмент. Когда пользователь вручную прокручивает вверх, чтобы прочитать предыдущий контент, его немедленно перетаскивают обратно вниз. [b]Что я ищу[/b]: [list] [*]Способ определить, когда пользователь вручную прокрутил нижнюю часть
[*]Чистый способ приостановить автоматическую прокрутку, когда он это сделает
[*]Возобновить автоматическая прокрутка, когда они возвращаются вниз.
[*]Обработка сценариев прокрутки как на настольном компьютере, так и на мобильных устройствах.