我们正在尝试使用clippath来使用javascript进行折线。 我们尝试编写一个可以正常工作的示例HTML代码:
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" id="parent">
<clippath id="cut-off-bottom">
<rect x="0" y="0" width="200" height="100" />
</clippath>
<circle cx="100" cy="100" r="100" clip-path="url(#cut-off-bottom)" />
</svg>
这绝对没问题。
但是当我们尝试使用javascript生成相同的代码时,它不起作用:
_svgNS = 'http://www.w3.org/2000/svg';
parent = document.getElementById('parent');
circle = document.createElementNS(_svgNS, 'circle');
circle.setAttributeNS(null, 'cx', '100');
circle.setAttributeNS(null, 'cy', '100');
circle.setAttributeNS(null, 'r', '100');
clippath = document.createElementNS(_svgNS, 'clippath');
clippath.setAttributeNS(null, 'id', 'clip');
r = document.createElementNS(_svgNS, 'rect');
r.setAttributeNS(null, 'x', '0');
r.setAttributeNS(null, 'y', '0');
r.setAttributeNS(null, 'width', '200');
r.setAttributeNS(null, 'height', '100');
clippath.appendChild(r);
circle.setAttributeNS(_svgNS, 'clip-path', 'url(#clip)');
parent.appendChild(clippath);
parent.appendChild(circle);
任何人都可以帮助我们找到上述代码的问题......
提前致谢。
答案 0 :(得分:16)
经过一段时间的摆弄后,发现SVG非常区分大小写,而clippath
元素需要是clipPath
元素。
见工作小提琴:http://jsfiddle.net/F4mq9/2/
非常奇怪,静态样本可以正常工作。
答案 1 :(得分:1)
您将id
的{{1}}设置为<clippath>
,然后设置clip
。您需要匹配您设置的clip-path="url(#clippath)
属性。
我已经篡改了你的一些代码(在创建元素后立即附加元素,而不是在结尾处添加元素)。这对解决方案没有影响。
答案 2 :(得分:0)
旧问题,但是未在批准的修补程序中提及该修补程序。它不起作用的原因是由于clippath属性上的名称空间。就像在jsfiddle中一样,名称空间网址应设置为null
。