2014-02-23 66 views
3

我有svg文本元素的问题。我想把它翻过来。 为此,我使用scale(-1,1)函数。Svg文本元素垂直翻转

var t = getMatrix(element); 
t.scale(-1,1); 
element.transform(t); 

但是元素似乎是相同的。转换不起作用。

如果我尝试翻转横轴,按比例(1,-1)函数。它的工作原理

请问我做错了什么?

+1

你能穿上的jsfiddle测试的例子吗?不知道你的getMatrix等。 – Ian

+0

您似乎在使用自定义库,但没有告诉我们它是什么,我们无法帮助您。下面的答案使用了简单的Javascript和[W3 SVG接口方法](http://www.w3.org/TR/SVG11/coords.html#InterfaceSVGTransformList) – AmeliaBR

回答

3

如果你想创建一个使用变换对象在SVG元素的变换,它是五(5)步骤:

1)安装转换到你的元素。

var attachTransObject=myElement.transform 

2.)为该附加变换创建变换列表。

var transObjList=attachTransObject.baseVal 

3.)启动一个转换请求对象。

var requestTransformObj=mySVG.createSVGTransform() 

4.)执行/请求期望的变换。

requestTransformObj.setScale(-1,1) 

5.)将请求追加到元素的变换列表。

transObjList.appendItem(requestTransformObj) 

这看起来可能有些迟钝,但是一旦您了解了这五个步骤,就会非常无缝。

例如,翻转文本元素围绕y轴,在其X,Y点是如下:

var x=parseFloat(myText.getAttribute("x")) 
var y=parseFloat(myText.getAttribute("y")) 

var attachTransObject=myText.transform 
var transObjList=attachTransObject.baseVal 
var requestTransformObj=mySVG.createSVGTransform() 
requestTransformObj.setTranslate(x,y) 
transObjList.appendItem(requestTransformObj) 
var requestTransformObj=mySVG.createSVGTransform() 
requestTransformObj.setScale(-1,1) 
transObjList.appendItem(requestTransformObj) 
var requestTransformObj=mySVG.createSVGTransform() 
requestTransformObj.setTranslate(-x,-y) 
transObjList.appendItem(requestTransformObj) 

这将建立类似于文本元件上的变换:

transform="translate(153.785 94.71) scale(-1 1) translate(-153.785 -94.71)" 
+0

也许这只是一种语言的东西,但你让我困惑于“附加对元素的转换“和”创建转换列表“。转化列表已经存在于元素上,您只需将其保存到变量以方便访问。 – AmeliaBR

+0

P.S.对于原始的海报,一个简单的工作示例:http://fiddle.jshell.net/LvuS3/。请注意,在小提琴中,文本最初是通过转换进行定位的,因此我可以将负比例因子作为列表中的附加转换添加。如果文本已经用x和y值定位,那么您需要像在@Francis Hemsher的代码中那样调整它们(否则您的内容将反映在您的svg边界之外)。 – AmeliaBR