TimeCoder
@TimeCoder

На чем делают frontend online-редакторов?

Например, взять тот же гуглодок, что там на главной странице?
Если положить просто textarea, набирать текст в нем можно, и каким-то образом отправлять изменения на сервер тоже. Но как только потребуется возможность одновременного редактирования несколькими пользователями, textarea уже не подходит: прилетают с сервера данные, что кто-то впечатал новое слово в начале документа. Обновить лишь часть текста в textarea нельзя, гонять весь текст - накладно. К меня пока такие варианты:

1. Представить страницу документа как цепочку span'ов (одно слово - один span), и на js реализовать логику текстового контрола. Т.е. когда набираем текст, ловим нажатия клавиш, и добавляем их в текущий span (все на js, без перезагрузки страницы естественно). Если с сервера приходят данные о неком изменении в тексте, дергаем нужный span.

2. Представить страницу документа как анимацию, т.е. с помощью какой-нибудь либы рендерить текст. Тут, кроме логики нажатий клавиш (и, кстати, выделения фрагментов текста с shift), еще придется на js написать логику скрола по документу.

Первый вариант видится проще, но может можно еще проще?
  • Вопрос задан
  • 2443 просмотра
Решения вопроса 1
Petroveg
@Petroveg
Миром правят маленькие с#@&ки
Обновить лишь часть текста в textarea нельзя

Теоретически можно. Знаю по такому решению «висячих строк». Требует прохода по всему документу. Крайне накладно.

Представить страницу документа как цепочку span'ов (одно слово - один span)

Именно так и поступает Google, только span используется внутри блочных элементов, чтобы грамотно считать clientRects. Блоки а-ля «параграф» преобразуются в блочный элемент (конечно же div, кто бы сомневался). Технически верно, иначе придётся лопатить весь код, а это... Описано в п.1.

Представить страницу документа как анимацию

Поход с div и span зело способствует и анимации. Почему нет?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы