Показать сообщение отдельно
  #2 (permalink)  
Старый 28.08.2013, 14:23
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

Сообщение от yriiarutiunian
Здравствуйте, есть некоторая длинная строка, необходимо реализовать разбиение строки с переносом чтобы данный текст вмещался в определенную ширину.
общая идея такая (W - заданная ширина в пикселях):

1) "длину текста в пикселях" можно узнать так: помести текст в div (position: absolute) и зацени offsetWidth этого дива.
2) Топорное решение влоб - разбить текст на слова, далее в некоторую строку прибавлять по слову, вычислять ширину (п.1) и смотреть, не слишком ли большая (сравнивай с W). Когда слово не сможет вместиться, добавляй строку в копилку, и начинай так же собирать вторую строку. И т.д.
3) Много операций со строками. Можно оптимизировать - сначала помести весь текст в <div style="width:Wpx"><span></span></div> (внутрь спана), и посмотри span.getClientRects(). оно вернет набор прямоугольников, на которые разбился спан при переносе слов. width этих прямоугольников можно взять за первое приближение при разбивке, там интерполировать по количествам символов, найти ближайшие пробелы и т.д.
Ответить с цитированием