Por lo tanto, el problema es en realidad cómo hacer palabra y embalaje en HTML5 lienzo:
Todo esto es para la conversión de algunos elementos HTML estándar que sujetan el texto y/o una foto en un lienzo HTML5. Y desafortunadamente, el método '.fillText()' no es lo suficientemente inteligente como para romper una pieza de texto para , por lo que necesito "detectar" manualmente cada línea.
Lo que usted puede hacer es measureText
posteriormente agregar una palabra a la vez. Mida la primera palabra, y si se ajusta al ancho de su contenedor (ctx2d.measureText(words).width <= containerWidth
), puede agregar otra palabra y medir nuevamente. Hasta que la cadena de palabras no encaje. Si no es así, debe marcar fillText
en la línea siguiente.
En cuanto a los saltos de línea insertados manualmente, se representan específicamente en HTML, ya sea por \n
o \r
caracteres en textareas o por elementos HTML, como <br \>
. Por lo tanto, antes de medir el texto, es posible que desee dividirlo por párrafos.
En áreas de texto:
var paragraphs = textarea.value.split('\n');
En elementos no forma:
var paragraphs = [];
// getting all <p> and elements in a typical HTML element
// as well as individual text nodes (they are just DOM-nodes),
// separated by <br /> elements
var innerNodes = nonFormElement.childNodes;
for (var i = 0, len = innerNodes.length; i += 1) {
// if a sub-element has some text in it,
// add the text to our list
var content = innerNodes[i].textContent;
if (content) {
paragraphs.push(content);
}
}
[. Esto podría ser de alguna ayuda] (http://stackoverflow.com/questions/320184/how- to-prevent-long-words-from-breaking-my-div) – xan
O http://stackoverflow.com/questions/4719777/finding-line-breaks-in-textarea-that-is-word-wrapping-arabic- texto – Theo
¿Qué estás tratando de lograr al final? – katspaugh