javascript - 有没有办法动态创建 feTurbulence 过滤器?

标签 javascript svg svg-filters

我正在尝试创建一组对象,每个对象都有自己独特的 feTurbulence 过滤器和独特的属性。 我正在生成过滤器,然后将它们附加到现有的 SVG 元素。 我遇到的问题是,当我尝试动态创建过滤器时,标签呈现为 feturbulence 而不是 feTurbulence。 到目前为止,这是我尝试过的:

var testfilter = document.createElement('filter');
var turbulence = document.createElement("feTurbulence")
var dispMap = document.createElement('feDisplacementMap')
var filterHolder = document.getElementById("filterHolder")
testfilter.setAttribute("id", "filter1");
turbulence.setAttribute("type","fractalNoise");
turbulence.setAttribute("baseFrequency",".003");
turbulence.setAttribute("numOctaves","5");
turbulence.setAttribute("seed","8517");
testfilter.appendChild(turbulence);
dispMap.setAttribute("in", "SourceGraphic");
dispMap.setAttribute("scale", "180");
testfilter.appendChild(dispMap);
filterHolder.appendChild(testfilter);

我已经尝试像下面这样将 feTurbulence 作为变量传递,但它仍然呈现为全小写

var turbString = "feTurbulence";
var turbStringCap = turbString.substring(0,2) + turbString.charAt(2).toUpperCase() + turbString.slice(3);
var turbulence = document.createElement(""+turbStringCap+"")

有没有人知道如何解决这个问题或我哪里出错了?任何建议将不胜感激

最佳答案

我已经重写了您的代码,现在可以正常工作了。我希望这就是您要问的。

const SVG_NS = 'http://www.w3.org/2000/svg';

let testfilter = document.createElementNS(SVG_NS, 'filter');
testfilter.setAttribute("id","filter1");

let turbulence =document.createElementNS(SVG_NS, 'feTurbulence');
turbulence.setAttributeNS(null,"type","fractalNoise");
turbulence.setAttributeNS(null,"baseFrequency",".003");
turbulence.setAttributeNS(null,"numOctaves","5");
turbulence.setAttributeNS(null,"seed","8517");

var dispMap = document.createElementNS(SVG_NS, 'feDisplacementMap');
dispMap.setAttributeNS(null,"in", "SourceGraphic");
dispMap.setAttributeNS(null,"scale", "180");

testfilter.appendChild(turbulence);
testfilter.appendChild(dispMap);
filterHolder.appendChild(testfilter);
#filterHolder{width:0;height:0; position:absolute;left:-10em}
svg{border:1px solid}
<svg id="filterHolder"> 
</svg>


<svg>
  <circle cx="150" cy="75" r="50" filter="url(#filter1)" />
</svg>

关于javascript - 有没有办法动态创建 feTurbulence 过滤器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57560682/

相关文章:

javascript - jquery 通过 .html() 访问元素返回未定义

Javascript:时间更新结束函数

未应用 CSS 动画

svg - 在 SVG 中绘制一个带有阴影的圆圈会剪裁边缘

html - 使用 css3 的 SVG 阴影

javascript - 在 Dart 中测试性能

javascript - 这个正则表达式是什么意思。检查 http 或 https 超链接就足够了吗?

javascript - 来自 Canvas 的 "DOM Exception 18"

javascript - 如何在悬停时为 svg 图像中的笔画设置动画

html - 在元素上应用 SVG css 过滤器会导致其可见性