我正在尝试使用JavaScript创建并添加feGaussianBlur过滤器到SVG矩形,使用this code作为参考。我得到一个矩形,但它没有过滤。我做错了什么?
我这样想:
var container = document.getElementById("svgContainer");
var mySvg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
mySvg.setAttribute("version", "1.1");
container.appendChild(mySvg);
var obj = document.createElementNS("http://www.w3.org/2000/svg", "rect");
obj.setAttribute("width", "90");
obj.setAttribute("height", "90");
var defs = document.createElementNS("http://www.w3.org/2000/svg", "defs");
var filter = document.createElementNS("http://www.w3.org/2000/svg", "filter");
filter.setAttribute("id","f1");
filter.setAttribute("x","0");
filter.setAttribute("y","0");
var gaussianFilter = document.createElementNS("http://www.w3.org/2000/svg", "feGaussianBlur");
gaussianFilter.setAttribute("in","SourceGraphic");
gaussianFilter.setAttribute("stdDeviation","15");
filter.appendChild(gaussianFilter);
defs.appendChild(filter);
mySvg.appendChild(defs);
obj.setAttribute("filter","url(#f1)");
mySvg.appendChild(obj);
答案 0 :(得分:4)
以上代码现在适用于我!您可以简单地使用createElementNS
,setAttribute
和appendChild
方法。
答案 1 :(得分:0)
如果您更喜欢更易读的代码 - 就像我一样 - svg.js现在有svg filter plugin。您的示例代码将缩减为:
var draw = SVG('canvas')
draw.rect(90,90)
rect.filter(function(add) {
add.gaussianBlur('15')
})
这可能是一年太晚但仍然值得一提:)