【发布时间】: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 生成 <animate> 元素时,在 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 生成的,因此我知道它正在生成正确的属性名称和值。 <animate> 元素的 namespaceURI 在两者(SVG 命名空间)之间是相同的,所有属性的 namespaceURI 也是相同的(null)。
有没有办法让 JS 生成的 <animate> 元素在 Chrome 中工作?
【问题讨论】:
-
我已将此记录为 Chromium 错误:code.google.com/p/chromium/issues/detail?id=122846
标签: javascript google-chrome svg smil