He escrito un script bastante simple que tomará elementos (en este caso, los elementos <p>
son la principal preocupación) y escriba su contenido como una máquina de escribir, uno por uno.Preformateando texto para evitar que se vuelva a dibujar
El problema es que cuando se escribe, cuando llega al borde del contenedor a mitad de palabra, refluye el texto y salta a la siguiente línea (como ajuste de palabra en cualquier editor de texto).
Esto es, por supuesto, el comportamiento esperado; sin embargo, me gustaría formatear previamente el texto para que esto no suceda.
Me imagino que insertando <br>
antes de la palabra que se envolvería sería la mejor solución, pero no estoy seguro de cuál es la mejor manera de hacerlo es que admite todos los tamaños de fuente y anchuras de contenedor, mientras mantiene cualquier etiqueta HTML intacta
Me imagino algo relacionado con un elemento oculto <span>
, añadiéndole texto gradualmente y comprobando su ancho con respecto al ancho del contenedor podría estar en el camino correcto, pero no estoy muy seguro de cómo armar esto. Cualquier ayuda o sugerencia sobre mejores métodos sería apreciada.
Editar:
he conseguido escribir algo que tipo de obras utilizando jQuery, aunque es muy descuidado, y lo más importante, a veces parece saltarse palabras, y yo puedo' T averiguar por qué. #content es el nombre del contenedor y #ruler es el nombre del <span>
oculto. Estoy seguro de que hay una manera mucho mejor de hacer esto.
function formatText(html) {
var textArray = html.split(" ");
var assembledLine = "";
var finalArray = new Array();
var lastI = 0;
var firstLine = true;
for(i = 0; i <= textArray.length; i++) {
assembledLine = assembledLine + " " + textArray[i];
$('#ruler').html(assembledLine);
var lineWidth = $('#ruler').width();
if ((lineWidth >= $('#content').width()) || (i == textArray.length)) {
if (firstLine) { var tempArray = textArray.slice(lastI, i); }
else { var tempArray = textArray.slice(lastI+1, i); }
var finalLine = tempArray.join(" ");
finalArray.push(finalLine);
assembledLine = "";
if (lineWidth > $('#content').width()) { i = i-1; }
lastI = i;
firstLine = false;
}
}
return finalArray.join("<br>");
}
No tiene una solución completa, pero si agrega palabras de una en una para el lapso, puede verificar la altura para saber cuándo agregar un salto de línea, luego agregar un '
', o algo para agregar un salto de línea dura. Solo asegúrese de que el '
' se agrega como un caracter, y no como '<',
¿Es posible comenzar con todo el texto en el elemento' # content' en un '' y cambiarlo un carácter a la vez a ''? Si eso causa demasiada inquietud, envuelve cada personaje en tramos y simplemente cambia la clase. –