ГЛУБОКИЙ АУДИТ выявил корневые причины прыжков: НАЙДЕННЫЕ ПРОБЛЕМЫ: 1. chatMarkRead делал свою прокрутку ПОСЛЕ handleInitialMessages - mark.scrollIntoView() или autoscroll() в requestAnimationFrame - Конфликтовал с уже установленной прокруткой 2. Дублирование обработчика кнопки 'вниз': - chatMarkRead.js: btn.addEventListener - chat-detail-enhanced.js: scrollBtn.addEventListener - Два обработчика на одну кнопку! 3. Излишняя сложность в scrollToBottom(): - Вызывал markReadApi.autoscroll() вместо прямой установки - Дополнительный уровень косвенности = источник багов ИСПРАВЛЕНИЯ: 1. chatMarkRead НЕ скроллит при инициализации: - Divider создается, но не скроллится к нему - Прокрутка управляется ТОЛЬКО из handleInitialMessages - Единая точка ответственности 2. Убрано дублирование кнопки: - Удален обработчик из chat-detail-enhanced.js - Остался только в chatMarkRead.js 3. Упрощен scrollToBottom(): - Прямая установка scrollTop вместо вызова markReadApi - Поддержка instant режима (без анимации) - Предсказуемое поведение 4. Добавлены комментарии и документация: - Пояснено почему НЕ скроллим в chatMarkRead - Описано назначение каждой функции прокрутки - Создан полный аудит в docs/completed/SCROLL_CONFLICTS_AUDIT.md АРХИТЕКТУРА ПРОКРУТКИ: ✅ При загрузке: ТОЛЬКО handleInitialMessages ✅ Кнопка вниз: chatMarkRead.autoscroll() ✅ Новые сообщения: ТОЛЬКО если свое ИЛИ уже внизу ✅ Ввод текста: autoscroll() если внизу РЕЗУЛЬТАТ: ✅ Нет прыжков - единая точка управления прокруткой ✅ Нет конфликтов - каждая функция делает одно ✅ Нет дублирования - один обработчик на событие ✅ Предсказуемость - прямые вызовы вместо косвенных Файлы: - userWebSocket.js: упрощен scrollToBottom - chatMarkRead.js: убрана автопрокрутка при инициализации - chat-detail-enhanced.js: убран дублирующий обработчик - docs/completed/SCROLL_CONFLICTS_AUDIT.md: полный аудит
Завершенные задачи
Эта папка содержит документацию по завершенным задачам проекта.
📊 Категории
🔄 Рефакторинг (5 файлов)
- BASE_TEMPLATE_REFACTORING_COMPLETE.md - базовые шаблоны
- CHAT_LIST_REFACTORING_COMPLETE.md - список чатов
- DOCUMENTS_REFACTORING_COMPLETE.md - модуль документов
- JS_MODULES_REFACTORING_COMPLETE.md - JavaScript модули
- REFACTORING_SUMMARY.md - общая сводка
🐛 Исправления (7 файлов)
- CHAT_CACHING_FIX.md - кэширование чатов
- CHAT_LIST_BUGS_FIX.md - баги списка чатов
- FOUC_FIX.md - Flash of Unstyled Content
- MESSAGE_NEWLINES_FIX.md - переносы строк в сообщениях
- POLL_WEBSOCKET_FIX.md - WebSocket для опросов
- WEBSOCKET_ERROR_FIX.md - ошибки WebSocket
- WEBSOCKET_KEEPALIVE_FIX.md - keepalive соединения
✨ Реализованные фичи (10+ файлов)
- AVATAR_CROPPER_IMPLEMENTATION.md - обрезка аватаров
- FEED_AJAX_REFACTORING.md - AJAX лента новостей
- FORWARDED_MESSAGE_METADATA.md - метаданные пересылки
- MESSAGE_EDITING_FULL_RERENDER.md - полный рендеринг при редактировании
- MESSAGE_RENDERING_REFACTORING.md - рендеринг сообщений
- MESSAGE_SELECTION_FORWARDING.md - выбор и пересылка сообщений
- MESSAGE_SENDING_REFACTORING.md - отправка сообщений
- POLLS_IMPLEMENTATION.md - система опросов
- POLL_VOTERS_LIST.md - список проголосовавших
- REACTIONS_FROM_DATABASE.md - реакции из БД
- REPLY_UPDATE_ON_EDIT.md - обновление ответов
- и другие...
📝 Примечание
Все задачи в этой папке завершены и работают в production. Файлы сохранены для истории и справки.