创建一个新的SVGTransform对象以附加到SVGTransformList

dla*_*lin 3 javascript svg

我正在使用firefox 3.6并且想要在单击时向svg元素添加翻译; 这个元素已经有了其他翻译.

var svgs = document.getElementsByTagName("svg:svg");
var group = svgs[0].childNodes[1];
group.addEventListener("click",function(e){
    var group2 = group.cloneNode(true);
    group2.setAttribute("transform", group2.getAttribute("transform")+" translate(10,10)");
    svg2.insertBefore(whole2, whole);
},false);
Run Code Online (Sandbox Code Playgroud)

但另一种方法setAttribute是:

group2.translate.baseVal.appendItem(newSVGTransformTranslation);
Run Code Online (Sandbox Code Playgroud)

在我被困的地方,我可以打电话

newSVGTransformTranslation =
  new SVGTransform(SVGTransform.SVG_TRANSFORM_TRANSLATE);
Run Code Online (Sandbox Code Playgroud)

但是生成的对象没有setTranslate(x,y)我期望的方法; 也没有任何人.奇怪group2.translate.baseVal.getItem(0)的确有它,但没有克隆或复制方法可用.

我必须错误地使用构造函数.有没有人有正确形式的例子?

Eri*_*röm 7

请参阅SVGSVGElement.createSVGTransform.

一个例子:

var tfm = svgroot.createSVGTransform();
tfm.setTranslate(x,y);
Run Code Online (Sandbox Code Playgroud)

  • 我已经为此工作好几天了,令人惊讶的是,使用 javascript 进行 svg 转换的示例很少,而且没有一个是完整的。这个答案最接近完整的答案,并且有足够的线索让我终于弄清楚如何去做。 (2认同)
  • @Chano 对。只需在我的代码中查找一下,显然您*只能*将 `.createSVGTransform` 函数作为封装 HTML `<svg>...</svg>` 标记的 JS 对象的属性。您无法从 svg 标签对象*内的任何 SVG 对象获取它,只能从 svg 根对象获取它。下面是我用来从任何从属 svg 对象获取 svg 根对象的代码:`var svgRoot = svg.viewportElement; //获取<svg>元素`。希望这可以帮助! (2认同)