由于某些原因,我无法让我的SVG过滤器在Firefox中工作。但是,他们在Opera中运行良好。我设置为过滤器的属性就消失了。这很奇怪。Firefox中的SVG过滤器
这里是我的javascript代码:
defsElement = SVGDoc.createElement("defs");
var filterElement = SVGDoc.createElement("filter");
filterElement.setAttribute("id", "cm-mat");
filterElement.setAttribute("filterUnits", "objectBoundingBox");
var fecolormatrixElement = SVGDoc.createElement("feColorMatrix");
fecolormatrixElement.setAttribute("type", "matrix");
fecolormatrixElement.setAttribute("in", "SourceGraphic");
fecolormatrixElement.setAttributeNS(null, "values", "1 1 1 1 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1");
filterElement.appendChild(fecolormatrixElement);
defsElement.appendChild(filterElement);
SVGDoc.documentElement.insertBefore(defsElement, SVGDoc.documentElement.childNodes.item(1));
partRef = getElementFromID(SVGDoc.documentElement, part);
if(partRef != null)
{
partRef.style.setProperty('filter', 'url(#cm-mat)', null);
}
有什么想法? 谢谢
是的,如果应用过滤器,结果应该是全白的。我很想知道更多关于Opera在原始示例中做了什么(我的猜测是错误名称空间中的元素,因为您使用createElement而不是createElementNS)。上面代码片段的非脚本化等价物显示了Opera和Firefox的行为相同(白色输出)。 – 2010-05-18 06:36:51
对不起,我正在旋转数值并忘记重置它们。我尝试了一些截然不同的值,但没有任何变化。我只是放弃了动态添加JavaScript的svg元素,并手动添加它们。它现在有效,谢谢。 – Nick 2010-05-18 15:33:07