Останні тижні працюю над лібою, яка рендерить чатик.
І я навіть не думав про те, наскільки складно реалізувати плавний чат з віртуалізацією.
Здавалось би цих чатів повно і мав би бути якийсь більш менш стандартний підхід, але ні.
Чому складно?
👉 Для плавного скролінгу історії потрібна віртуалізація - це вже саме по собі складно.
👉 Зазвичай ми скролимо сторінки зверху→вниз, а чати скроляться знизу→вгору. Це друга складність, яка накладається на попередню.
👉 Історія повідомлень має ліниво завантажуватись, коли ми гортаємо вгору. При цьому змінюється розмір віртуалізованого контейнера та кількість елементів у ньому. Історія починає "дригатись" і цього треба уникнути.
👉 Паралельно можуть одночасно приходити нові повідомлення.
👉 Тобто нові елементи у список повідомлень можуть прилітати з обох боків, а при цьому треба зберігати положення і плавність скролу.
👉 Крім цього, коли приходять нові повідомлення, нам треба вирішувати чи підскролюємо ми до нових повідомлень.
👉 Якщо прийшло багато нових повідомлень, то до якого повідомлення ми скролимо і як? Це теж окрема історія.
👉 А ще є лічильник нових повідомлень і кнопка, яка стрибає до нових повідомлень або в кінець історії.
👉 І є ще індикатор, який показує коли хтось набирає текст.
👉 А ще повідомлення можна видаляти з історії. При цьому вони можуть видалятись з будь-якого місця історії.
👉 Саме вікно чату при цьому може змінювати свої розміри, розгортатись і робитись великим або зменшуватись.
І ще безліч дрібніших проблем.
Post #327
1.1K
- 👍 8
- 🔥 3