javascript – 动态注入SVG过滤器并应用于HTML

前端之家收集整理的这篇文章主要介绍了javascript – 动态注入SVG过滤器并应用于HTML前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在玩将SVG过滤器应用于 HTML.如果所有内容都是硬编码的,这可以工作,虽然我需要-webkit-filter CSS id for chrome.当尝试使用 javascript动态创建带有过滤器的SVG元素时,它会失败.有谁能解释为什么?

这是我到目前为止:http://jsfiddle.net/H3UX8/1/

第一个图像和文本对在chrome和firefox上模糊,但第二对不是.

提取物不起作用:

  1. .dynamic div {
  2. -webkit-filter: url('#f2');
  3. filter: url('#f2');
  4. }
  5.  
  6. ...
  7.  
  8. var svg = document.createElement("svg");
  9. var filter = document.createElement("filter");
  10. filter.setAttribute("id","f2");
  11. var blur = document.createElementNS("http://www.w3.org/2000/svg","feGaussianBlur");
  12. blur.setAttribute("stdDeviation","5");
  13. filter.appendChild(blur);
  14. svg.appendChild(filter);
  15. document.body.appendChild(svg);
  16.  
  17. ...
  18.  
  19. <div class="dynamic">
  20. <div><img src="http://upload.wikimedia.org/wikipedia/en/2/24/Lenna.png" /></div>
  21. <div>HELLO WORLD TWO</div>
  22. </div>

html语法看起来完全相同.我猜测document.createElement不会创建具有svg功能标签,也可能只是在文档加载时读取过滤器ID.但是,我可以在静态示例中动态更改stdDeviation的值.

解决方法

试试这个:
  1. var NS = "http://www.w3.org/2000/svg";
  2. var svg = document.createElementNS( NS,"svg" );
  3.  
  4. var filter = document.createElementNS( NS,"filter" );
  5. filter.setAttribute( "id","f2" );
  6.  
  7. var blur = document.createElementNS( NS,"feGaussianBlur" );
  8. blur.setAttribute( "stdDeviation","5" );
  9.  
  10. filter.appendChild( blur );
  11. svg.appendChild( filter );
  12. document.body.appendChild( svg );

猜你在找的JavaScript相关文章