Как стать автором
Обновить

Комментарии 8

  1. Media queries <...>.

  2. clamp() <...>.

  3. SVG <text> <...>.

  4. Сторонние библиотеки и плагины - <...>.

  5. Подсчёт количества букв - <...>..

А еще можно "налету" превращать текст в картинку и масштабировать уже само изображение )

ЗЫ: Прошу прощения, у вас похожее было

Sandbox не работает... сделал длинный текст и он просто вылез за пределы.

Просто после изменения текста обновите страницу самого Sandbox. У меня с 780 символами всё работает. Разве что сам Sandbox бывает валяет дурака и подвисает.

Но необходимый размер текста можно вычислить после первой же итерации!

Кажется, смысл вашей статьи можно уместить в 3 строчки:
1. Аналитического решения задачи не существует, будем использовать перебор.
2. Для оптимизации полный перебор заменим на бинарный поиск.
3. При ресайзе вьюпорта используем троттлинг.

Зачем тут все эти стены кода — не совсем понятно.
И, кстати, тротлинг и дебонсинг это не одно и то же.

Аналитическое решение (оно же кэширование с условиями) существует. Но, конечно, всегда проще переложить вычисления из собственной головы на браузер пользователя.

Простите если я чего ляпну не так.

Первое на что хотел бы обратить внимание это variable fonts. Ведь там, набор параметров, позволяющих регулировать отображение шрифта просто гиганский.

И второе. Ваша задача уже лет 10 как решена в Google Docs. Причем решена двумая способами.

Способ первый заключается в том, что фактически все шрифты с которыми работает Docs парсятся, или заранее имеют предустановленные метрики глифов. Что дает возможность очень точно расчитывать все длины, зная размеры каждой буквы.

Способ второй - тот самый svg. Который они используют уже почти год вполне уверенно. И с точки зрения решения только этой проблемы, делают они это очень неплохо. Возможно вам стоит заглянуть в их canvas render, что бы забрать от туда этот кусок кода.

1) Размер шрифта можно легко вычислить через measureText

2) Ну а самый простой вариант, это делать все же в svg text, и одной строчкой кода просто корректировать viewBox, согласно длине text.getBBox().

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории