Files
crm.clientright.ru/MOBILE_KEYBOARD_FIX.md

7.7 KiB
Raw Permalink Blame History

🔧 Исправление проблемы с виртуальной клавиатурой на мобильных устройствах

📋 Проблема

На мобильных устройствах виртуальная клавиатура перекрывала поле ввода и кнопку отправки в AI Drawer, что делало интерфейс неудобным для использования.

Решение

1. Адаптивная высота для мобильных устройств

  • Добавлена поддержка 100dvh (динамическая высота viewport)
  • Автоматическая адаптация к изменению размера экрана при появлении клавиатуры

2. Фиксированное позиционирование поля ввода

  • Поле ввода теперь фиксируется внизу экрана на мобильных устройствах
  • Высокий z-index (1001-1002) для отображения поверх других элементов
  • Тень и граница для лучшей видимости

3. Автоматическая прокрутка при появлении клавиатуры

  • JavaScript обработчики для детекции появления/скрытия виртуальной клавиатуры
  • Автоматическая прокрутка к последнему сообщению при фокусе на поле ввода
  • Плавная прокрутка с поддержкой iOS (-webkit-overflow-scrolling: touch)

4. Улучшенные размеры для мобильных

  • Увеличенный размер шрифта (16px) для предотвращения зума на iOS
  • Увеличенные отступы и размеры кнопок для удобства нажатия
  • Адаптивные размеры для разных экранов (768px и 480px)

5. Дополнительные улучшения

  • Скрытие полос прокрутки на мобильных для экономии места
  • Улучшенная прокрутка с scroll-behavior: smooth
  • Класс keyboard-visible для дополнительной адаптации

📁 Измененные файлы

layouts/v7/resources/css/ai-drawer.css

  • Добавлены медиа-запросы для мобильных устройств (max-width: 768px, 480px)
  • Фиксированное позиционирование поля ввода
  • Адаптивные размеры и отступы
  • Стили для класса keyboard-visible
  • Улучшенная прокрутка для мобильных

layouts/v7/resources/js/ai-drawer.js

  • Метод initMobileHandlers() для инициализации мобильных обработчиков
  • Обработчики handleKeyboardShow() и handleKeyboardHide()
  • Метод scrollToBottom() для автоматической прокрутки
  • Детекция изменения размера viewport
  • Предотвращение зума на iOS

test_mobile_keyboard_fix.html (новый)

  • Тестовая страница для проверки мобильной адаптации
  • Автоматические тесты для всех функций
  • Информация об устройстве и браузере
  • Инструкции для ручного тестирования

🧪 Тестирование

Автоматические тесты

  1. Открытие AI Drawer - проверка корректного открытия на мобильных
  2. Адаптация к клавиатуре - проверка видимости поля ввода при появлении клавиатуры
  3. Размеры элементов - проверка подходящих размеров для мобильных
  4. Прокрутка и навигация - проверка плавности прокрутки
  5. Адаптивность интерфейса - проверка корректной адаптации к разным экранам

Ручное тестирование

  1. Откройте test_mobile_keyboard_fix.html на мобильном устройстве
  2. Нажмите "Открыть AI Drawer"
  3. Нажмите на поле ввода сообщения
  4. Проверьте, что поле ввода и кнопка "Отправить" остаются видимыми
  5. Проверьте автоматическую прокрутку к последнему сообщению
  6. Протестируйте на разных устройствах и браузерах

📱 Поддерживаемые устройства

  • iPhone (Safari, Chrome)
  • Android (Chrome, Firefox, Samsung Browser)
  • iPad (Safari, Chrome)
  • Планшеты Android
  • Различные размеры экранов (320px - 768px)

🔧 Технические детали

CSS медиа-запросы

@media (max-width: 768px) {
    /* Основные стили для мобильных */
}

@media (max-width: 480px) {
    /* Дополнительные стили для маленьких экранов */
}

JavaScript обработчики

// Детекция появления клавиатуры
window.addEventListener('resize', handleResize);

// Автоматическая прокрутка при фокусе
input.addEventListener('focus', () => {
    setTimeout(() => this.scrollToBottom(), 300);
});

Ключевые CSS свойства

  • position: fixed - фиксированное позиционирование поля ввода
  • 100dvh - динамическая высота viewport
  • -webkit-overflow-scrolling: touch - плавная прокрутка на iOS
  • z-index: 1001-1002 - высокий приоритет отображения

🎯 Результат

После внедрения исправлений:

  • Поле ввода всегда остается видимым на мобильных устройствах
  • Поле ввода правильно ужимается под размер экрана (60-85% ширины)
  • Кнопка "Отправить" доступна при появлении клавиатуры и не перекрывается
  • Автоматическая прокрутка к последнему сообщению
  • Плавная работа на всех мобильных браузерах
  • Предотвращение зума на iOS
  • Адаптивность к разным размерам экранов
  • Скругленные углы для современного вида
  • Оптимизированное расположение элементов в ряд

🚀 Следующие шаги

  1. Протестировать на реальных мобильных устройствах
  2. Собрать обратную связь от пользователей
  3. При необходимости дополнить адаптацию для других устройств
  4. Рассмотреть добавление дополнительных жестов (свайп для закрытия)

Дата создания: 16 сентября 2025
Статус: Готово к тестированию
Файлы: CSS, JS обновлены, тестовая страница создана