使用Snap.svg创建多行文本
Create multiple lines of text with Snap.svg
我一直不知道如何在Snap.svg中用一个paper.text元素创建多行文本
我尝试过使用
、''n及其变体,但都不起作用。我觉得奇怪的是,在raphael.js中这么容易做到这一点(它在文档中),但snap.svg文档对此只字未提,在web上搜索也一无所获。
非常感谢您的帮助,谢谢!
http://jsfiddle.net/f3mkqovm/
var myRect = paper.text(100, 100, ["Lorem",
"<br>","ipsum dolor sit 'n amet /n see ", "'n","amend"]).attr({
fill : 'black'
});
编辑:这是一个为拉斐尔工作的小提琴。由于snap.svg没有内置在jsfiddle中,所以我不知道其他fiddle会对任何人有多大帮助。http://jsfiddle.net/yf8364mp/
使用Snap.svg绘制多行文本有点麻烦
当使用字符串数组调用Paper.text方法时,Snap.svg会在text元素下创建tspan元素
如果要将文本元素显示为多行,则应手动设置每个tspan元素的位置
var paper = Snap(200,200);
paper.text({text:["Line1", "Line2", "Line3"]})
.attr({fill:"black", fontSize:"18px"})
.selectAll("tspan").forEach(function(tspan, i){
tspan.attr({x:0, y:25*(i+1)});
});
将插件函数重命名为您喜欢的任何函数:
Snap.plugin(function(Snap, Element, Paper, global) {
Element.prototype.layoutTspans = function(xOffset, vSpacing) {
this.selectAll("tspan").forEach(function(ts) {
ts.attr({x: parseInt(ts.parent().attr("x")) + xOffset, dy: vSpacing});
});
};
});
然后从任何祖先元素调用它,例如文本元素:
snap.select("#t1").layoutTspans(13, 20);
要对多个文本应用相同的偏移量和间距。。。(可能有一种方法可以通过插件直接支持selectAll,但我找不到任何文档或示例)。
snap.selectAll("g.badge").forEach(function(el) { el.layoutTspans(13, 20); });
相关文章:
- onkeyup无法动态创建多个文本区域
- 文本表示法VS.构造函数,用于在JavaScript中创建对象
- 如何在 JavaScript 中创建输入文本框
- 如何在php中创建一个函数,该函数与文本区域一起工作,通过输入类似[color:red]的内容来打印具有等效颜色的文本
- 如何为动态创建的文本区域中输入的值更新ng模型
- 创建闪烁“;文本“;在javascript中
- 使用删除文本创建新行
- 使用其他页面上表单的文本创建链接
- 数组函数不适用于从元素文本创建的JavaScript数组
- 从空格分隔的文本创建和实现数组:AngularJS
- 由表达式文本创建的正则表达式是否共享单个实例
- 如何在 RaphaelJS 中根据需要为文本创建默认属性并链接其他属性
- 如何使用在用户输入后继续显示的前置文本创建文本字段
- 如何从 html 格式的文本创建元素
- 从文本区域中的选定文本创建列表html
- 在DIV中动态地围绕所选文本创建SPAN
- 在Jquery UI对话框中基于触发器锚点的文本创建动态按钮名称
- 如何在飞行中用文本创建链接?——JQuery初学者
- 从文本创建链接
- 如何仅为文本创建正则表达式模式