3

考虑这个简单的 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

当我<animate>使用 JavaScript 生成元素时,在 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 生成的,因此我知道它正在生成正确的属性名称和值。两者(SVG命名空间)之间namespaceURI<animate>元素是相同的namespaceURI,所有属性(null)也是如此。

有没有办法让 JS 生成的<animate>元素在 Chrome 中工作?

4

1 回答 1

5

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

http://jsfiddle.net/VFUHk/

于 2012-04-10T19:54:10.493 回答