我有一个关于svg文本元素的问题。我想将它沿y轴翻转。为此,我使用了scale(-1,1)函数。
var t = getMatrix(element);
t.scale(-1,1);
element.transform(t);
但元素似乎是相同的。变换不起作用。
如果我尝试通过scale(1,-1)函数沿水平轴翻转,它可以工作。
请问,我做错了什么?
我有一个关于svg文本元素的问题。我想将它沿y轴翻转。为此,我使用了scale(-1,1)函数。
var t = getMatrix(element);
t.scale(-1,1);
element.transform(t);
但元素似乎是相同的。变换不起作用。
如果我尝试通过scale(1,-1)函数沿水平轴翻转,它可以工作。
请问,我做错了什么?
如果您想使用变换对象在SVG中对元素进行变换,这是一个由五(5)个步骤组成的过程:
1.) 将变换附加到您的元素上。
var attachTransObject=myElement.transform
2.) 为该附加变换制作一个转换列表。
var transObjList=attachTransObject.baseVal
3.) 启动一个转换请求对象。
var requestTransformObj=mySVG.createSVGTransform()
4.) 执行/请求所需的转换。
requestTransformObj.setScale(-1,1)
transObjList.appendItem(requestTransformObj)
这可能看起来有点晦涩,但一旦理解了这五个步骤,就会变得非常流畅。
例如,要在其x、y点上将文本元素沿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)"
谢谢帮忙。我忘了说我使用 Snap svg 库。那里有个 bug。
如果有人遇到同样的问题,这是解决方案: https://github.com/adobe-webplatform/Snap.svg/issues/153