Así que esto es lo que tengo:
<path class="..." onmousemove="show_tooltip(event,'very long text
\\\n I would like to linebreak')" onmouseout="hide_tooltip()" d="..."/>
<rect class="tooltip_bg" id="tooltip_bg" ... />
<text class="tooltip" id="tooltip" ...>Tooltip</text>
<script>
<
Respuestas:
Esto no es algo que sea compatible con SVG 1.1. SVG 1.2 tiene el
textAreaelemento, con ajuste automático de palabras, pero no está implementado en todos los navegadores. SVG 2 no planea implementarlotextArea, pero sí tiene texto ajustado automáticamente .Sin embargo, dado que ya sabe dónde deben producirse los saltos de línea, puede dividir el texto en varios
<tspan>s, cada uno conx="0"ydy="1.4em"para simular líneas de texto reales. Por ejemplo:Por supuesto, dado que desea hacer eso desde JavaScript, tendrá que crear e insertar manualmente cada elemento en el DOM.
fuente
<tspan>s? ¿Reemplazar? ¿División?var tspan = document.createElement('tspan') tspan.setAttribute('x','0'); tspan.setAttribute('dy','1.2em'); tspan.textContent = text; tt.appendChild(tspan);no muestra ningún texto.x=0es una coordenada absoluta: mueve el fragmento de texto al origen del sistema de coordenadas actual . Eltransformatributo delgelemento define un nuevo sistema de coordenadas actual y, suponiendo que el texto está alineado a la izquierda, el tspan se mueve hacia la izquierda. Esto actúa como una instrucción de retorno de carro.dy=1.2emes una coordenada relativa : mueve el fragmento de texto en esta cantidad, en relación con el fragmento de texto actual. Esto actúa como una instrucción de avance de línea. Combinado, obtienes un CR / LF.Supongo que ya lograste resolverlo, pero si alguien está buscando una solución similar, esto funcionó para mí:
Hay 3 líneas separadas por salto de línea.
fuente
Con la solución tspan, digamos que no sabe de antemano dónde colocar sus saltos de línea: puede usar esta función agradable, que encontré aquí: http://bl.ocks.org/mbostock/7555321
Eso automáticamente hace saltos de línea para svg de texto largo para un ancho dado en píxeles.
fuente
Creo que esto hace lo que quieres:
Divide el texto
\\\ny para cada uno coloca cada fragmento en un tspan. Luego calcula el tamaño del cuadro requerido según la longitud más larga del texto y el número de líneas. También necesitará cambiar el elemento de texto de información sobre herramientas para que contenga tres tspans:Esto supone que nunca tiene más de tres líneas. Si desea más de tres líneas, puede agregar más tspans y aumentar la longitud del bucle for.
fuente
"\\\n"lugar de"\n"?He adaptado un poco la solución por @steco, el cambio de la dependencia de
d3ajqueryy la adición de laheightdel elemento de texto como parámetrofuente
usa HTML en lugar de javascript
fuente