salto poner linea ejemplos desde concatenar agregar javascript string canvas split line-breaks

javascript - poner - salto de linea/n



Separar cadena en JavaScript y detectar salto de lĂ­nea (5)

Tengo una pequeña función que encontré que toma una cadena de un área de textarea y luego la coloca en un elemento canvas y envuelve el texto cuando la línea es demasiado larga. Pero no detecta saltos de línea. Esto es lo que está haciendo y lo que debería hacer:

Entrada:

Hello This is dummy text that could be inside the text area. It will then get put into the canvas.

Salida incorrecta:

Hello this is dummy text that could be inside the text area. It will then get put into the canvas.

Lo que debería salir:

Hello This is dummy text that could be inside the text area. It will then get put into the canvas.

Esta es la función que estoy usando:

function wrapText(context, text, x, y, maxWidth, lineHeight) { var words = text.split('' ''); var line = ''''; for(var n = 0; n < words.length; n++) { var testLine = line + words[n] + '' ''; var metrics = context.measureText(testLine); var testWidth = metrics.width; if (testWidth > maxWidth && n > 0) { context.fillText(line, x, y); line = words[n] + '' ''; y += lineHeight; } else { line = testLine; } } context.fillText(line, x, y); }

¿Es posible lograr lo que intento obtener? ¿O hay una manera de simplemente mover el área de texto como está en el lienzo?


Aquí está el código final que utilicé [OP]. Probablemente no sea la mejor práctica, pero funcionó.

function wrapText(context, text, x, y, maxWidth, lineHeight) { var breaks = text.split(''/n''); var newLines = ""; for(var i = 0; i < breaks.length; i ++){ newLines = newLines + breaks[i] + '' breakLine ''; } var words = newLines.split('' ''); var line = ''''; console.log(words); for(var n = 0; n < words.length; n++) { if(words[n] != ''breakLine''){ var testLine = line + words[n] + '' ''; var metrics = context.measureText(testLine); var testWidth = metrics.width; if (testWidth > maxWidth && n > 0) { context.fillText(line, x, y); line = words[n] + '' ''; y += lineHeight; } else { line = testLine; } }else{ context.fillText(line, x, y); line = ''''; y += lineHeight; } } context.fillText(line, x, y); }


Deberías tratar de detectar la primera línea.

Entonces el:

if(n == 0){ line = words[n]+"/n"; }

No estoy seguro, pero tal vez ayuda.


En caso de que necesite dividir una cadena de su JSON, la cadena tiene / n el carácter especial reemplazado por // n.

División de cadena por nueva línea:

Result.split(''/n'');

Split string recibido en JSON, donde el carácter especial / n fue reemplazado por // n durante JSON.stringify (en javascript) o json.json_encode (en PHP). Entonces, si tiene su cadena en una respuesta AJAX, fue procesada para su transporte. y si no se decodifica, tendrá el / n reemplazado por // n ** y deberá usar:

Result.split(''//n'');

Tenga en cuenta que las herramientas de depuración de su navegador pueden no mostrar este aspecto como esperaba, pero puede ver que la división por // n dio como resultado 2 entradas que necesito en mi caso:


Esto es lo que utilicé para imprimir texto en un lienzo. La entrada no proviene de un área de textarea , sino de la input y solo estoy dividiendo por espacio. Definitivamente no es perfecto, pero funciona para mi caso. Devuelve las líneas en una matriz:

splitTextToLines: function (text) { var idealSplit = 7, maxSplit = 20, lineCounter = 0, lineIndex = 0, lines = [""], ch, i; for (i = 0; i < text.length; i++) { ch = text[i]; if ((lineCounter >= idealSplit && ch === " ") || lineCounter >= maxSplit) { ch = ""; lineCounter = -1; lineIndex++; lines.push(""); } lines[lineIndex] += ch; lineCounter++; } return lines; }


Use lo siguiente:

var enteredText = document.getElementById("textArea").value; var numberOfLineBreaks = (enteredText.match(//n/g)||[]).length; alert(''Number of breaks: '' + numberOfLineBreaks);

DEMO

Ahora lo que hice fue dividir la cadena primero usando saltos de línea, y luego dividirla de nuevo como lo hacía antes. Nota: también puede usar jQuery combinado con expresiones regulares para esto:

var splitted = $(''#textArea'').val().split("/n"); // will split on line breaks

¡Espero que te ayude!

(Nota: esta pregunta ya fue hecha una vez here ).