2009-09-22 67 views
4

我使用Raphael构建了一些形状,现在我想将一些文本放入其中。但是,从例子看来,文本节点只能附加到纸上而不是svg的形状?使用Raphael JS创建文本节点

是否有可能在里面创建不同文字的多个形状?

我使用的例子是:

paper.text(50, 50, "Raphaël\nkicks\nbutt!"); 
+0

这里也问过,但没有解答:( http://groups.google.com/group/raphaeljs/browse_thread/thread/f23452980e739225/1cbfd7d8d8a91154?lnk=gst&q=text+circle#1cbfd7d8d8a91154 –

+0

相关:HTTP: //stackoverflow.com/questions/3679436/how-can-i-combine-objects-in-the-raphael-javascript-library – arboc7

回答

18

在圣拉斐尔,所有绘图元素(形状,线,文本,等)只存在为包括纸对象的一部分。他们本身没有层次结构。不幸的是,这些形状也没有文字属性。所以文本节点不能以正确的意义'附加'到形状元素上。

但是,您可以使用“设置”节点来赋予附加到形状的文本节点的外观。一个Set是一组元素,可以在单个操作中将变换(平移,旋转等)应用于所有成员。所以如果你创建了一个包含一个矩形和一个文本节点的集合,你可以把这个集合元素当作一个单独的实体。然后,您可以创建该集合的第二个实例并以不同的方式对待它。因此,虽然所有文本元素在技术上仍属于纸张对象,但它们表现为(并且出现)像它们属于矩形。

例如:

var paper = Raphael(0, 0, 400, 400); 
for (var i = 0; i < 10; i++) 
{ 
    var group = paper.set(); 
    group.push(paper.rect(10, 10, 50, 20)); 
    group.push(paper.text(35, 18, "Hello")); 

    group.translate(Math.random() * 350, Math.random() * 380); 
    group.rotate(Math.random() * 90); 
} 

作为一种不同的方法,我也有一个页面上创建大量单独的文件对象的合理的成功。但那可能不是你想去的地方。