我试图用FakeSmile
伪造IE9中的SMIL支持我正在动态创建SVG元素,添加带有animate元素的rect元素并调用beginElement()。 IE9给了我一个错误: Object不支持属性或方法'beginElement'
静态SVG的工作原理: http://jsfiddle.net/FG3PG/1/
如何使用FakeSmile进行修复? 以下显示了我正在尝试做的事情: http://jsfiddle.net/DgMDV/13/
这是相同的代码:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE HTML><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<script type="text/javascript" src="http://bazaar.launchpad.net/~smilteam/smil/MAIN/download/head:/smil.user.js-20080305202719-59ane0zgfr5f3vz8-1/smil.user.js"></script>
</head>
<body>
<meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8" />
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" baseProfile="full" height="200">
<rect class="drag resize" x="10" y="10" width="100" height="50" fill="#c66" />
</svg>
<script type="text/javascript">
var svg = document.getElementsByTagName('svg')[0];
var svgNS = svg.getAttribute('xmlns');
var rect = document.getElementsByTagName('rect')[0];
var animation = document.createElementNS(
"http://www.w3.org/2000/svg", "animate");
animation.setAttributeNS(null, 'attributeName', 'x');
animation.setAttributeNS(null, 'dur', 0.5);
animation.setAttributeNS(null, 'begin', 'indefinite');
animation.setAttributeNS(null, 'fill', 'freeze');
animation.setAttributeNS(null, 'to', 100);
rect.appendChild(animation);
animation.beginElement();
</script>
</body>
</html>
答案 0 :(得分:1)
Fenring(leunen-d)得知fakesmil不支持动态动画 并且可以使用以下功能添加: https://answers.launchpad.net/smil/+question/203333
function registerAnimation(anim) {
var targets = getTargets(anim);
var elAnimators = new Array();
for(var i=0; i<targets.length ;i++) {
var target = targets[i];
var animator = new Animator(anim, target, i);
animators.push(animator);
elAnimators[i] = animator;
}
anim.animators = elAnimators;
var id = anim.getAttribute("id");
if (id)
id2anim[id] = anim;
for(var i=0; i<elAnimators.length ;i++)
elAnimators[i].register();
}
答案 1 :(得分:0)
您似乎错误地设置了一个属性:
animation.setAttributeNS(null, 'begin', 'indefinite');
更改属性名称以匹配值:
animation.setAttributeNS(null, 'repeatCount', 'indefinite');