【问题标题】:Why does this JS-created SVG <animate> not work in Chrome?为什么这个 JS 创建的 SVG <animate> 在 Chrome 中不起作用?
【发布时间】:2012-04-10 17:16:41
【问题描述】:

考虑一下这个简单的 SVG SMIL 动画:

<svg xmlns="http://www.w3.org/2000/svg" viewBox="-50 -50 100 100">
  <circle r="40" fill="red">
    <animate
      attributeType="CSS" begin="click"
      attributeName="fill" to="blue" dur="0.3s" fill="freeze"/>
  </circle>
</svg>

这在 Windows 上的 Chrome v18 中可以正常工作(以保留颜色的错误为模):
http://phrogz.net/svg/change-color-on-click-simple.svg

当我使用 JavaScript 生成 &lt;animate&gt; 元素时,在 Firefox、Safari 和 Opera 中一切正常,但在 Chrome 中却不行。在 Chrome 中,当我点击圆圈时没有任何反应。

<svg xmlns="http://www.w3.org/2000/svg" viewBox="-50 -50 100 100">
  <circle r="40" fill="red"/>
  <script>
    var c = document.querySelector('circle');
    createOn(c,'animate',{
      attributeType:'CSS', begin:'click',
      attributeName:'fill', to:'blue',
      dur:'0.3s', fill:'freeze'
    });
    function createOn(el,name,attrs){
      var e = el.appendChild(document.createElementNS(el.namespaceURI,name));
      for (var name in attrs) e.setAttribute(name,attrs[name]);
      return e;
    }
  </script>

在此处查看此 JavaScript 版本:
http://phrogz.net/svg/change-color-on-click-simple-js.svg

控制台中没有脚本错误。第一个示例的内容实际上是在加载第二个示例后通过从 Chrome 开发人员工具中选择 Copy As HTML 生成的,因此我知道它正在生成正确的属性名称和值。 &lt;animate&gt; 元素的 namespaceURI 在两者(SVG 命名空间)之间是相同的,所有属性的 namespaceURI 也是相同的(null)。

有没有办法让 JS 生成的 &lt;animate&gt; 元素在 Chrome 中工作?

【问题讨论】:

标签: javascript google-chrome svg smil


【解决方案1】:

如果我在 附加动画之前定义属性,它似乎可以工作。

http://jsfiddle.net/VFUHk/

【讨论】:

  • 哇!很棒的发现。那么,我想这并不完全是疯狂的。
猜你喜欢
  • 1970-01-01
  • 2012-06-02
  • 2021-08-21
  • 2022-01-19
  • 2019-03-12
  • 1970-01-01
  • 2017-11-10
  • 2011-10-22
  • 1970-01-01
相关资源
最近更新 更多