我正在尝试通过构建文本字符串来包装文本,并使用getComputedTextLength查找文本何时超出允许的宽度.但是,我找不到一种简单的方法来逐步构建可以使用的文本getComputedTextLength.
一般的想法是:
str = svgDocument.createTextNode(myText[word]); // first word on new line
word++;
obj = text.cloneNode(true); // new text element for this line
obj.appendChild(str);
svgDocument.documentElement.appendChild(obj); // reqd for getComputedTextLength?
for( ; word < myText.length; word++) {
next_width = obj.getComputedTextLength(); // get current line width
if(next_width >= extent)
break;
str += " "; // add next word to the line
str += myText[word];
...
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以告诉我如何使这个工作?大概是str被复制而不是引用的obj,但我也试图把obj.removeChild(str)和obj.appendChild(str)在循环,但appendChild崩溃.我还尝试了各种组合,包括移动documentElement.appendChild,删除obj和重新附加,等等.
Pet*_*dge 21
这应该工作:
var svgNS = "http://www.w3.org/2000/svg";
var width = 200;
function init(evt)
{
if ( window.svgDocument == null ) {
svgDocument = evt.target.ownerDocument;
}
create_multiline("Whatever text you want here.");
}
function create_multiline(text) {
var words = text.split(' ');
var text_element = svgDocument.getElementById('multiline-text');
var tspan_element = document.createElementNS(svgNS, "tspan"); // Create first tspan element
var text_node = svgDocument.createTextNode(words[0]); // Create text in tspan element
tspan_element.appendChild(text_node); // Add tspan element to DOM
text_element.appendChild(tspan_element); // Add text to tspan element
for(var i=1; i<words.length; i++)
{
var len = tspan_element.firstChild.data.length; // Find number of letters in string
tspan_element.firstChild.data += " " + words[i]; // Add next word
if (tspan_element.getComputedTextLength() > width)
{
tspan_element.firstChild.data = tspan_element.firstChild.data.slice(0, len); // Remove added word
var tspan_element = document.createElementNS(svgNS, "tspan"); // Create new tspan element
tspan_element.setAttributeNS(null, "x", 10);
tspan_element.setAttributeNS(null, "dy", 18);
text_node = svgDocument.createTextNode(words[i]);
tspan_element.appendChild(text_node);
text_element.appendChild(tspan_element);
}
}
}
]]>
</script>
<text x="10" y="50" id="multiline-text"> </text>
Run Code Online (Sandbox Code Playgroud)
它的工作原理是将tspan元素添加到文本元素,然后向每个元素添加文本.
结果如下:
<text>
<tspan>Whatever text</tspan>
<tspan>you want here.</tspan>
</text>
Run Code Online (Sandbox Code Playgroud)
为了使getComputerTextLength起作用,您需要首先创建tspan(或text)元素并确保它在DOM中.另请注意,为了将文本添加到tspan元素,您需要使用createTextNode()并附加结果.
| 归档时间: |
|
| 查看次数: |
27837 次 |
| 最近记录: |