2015-10-22 156 views
1

对于SVG动画,Internet Explorer不支持beginElement,所以我正在寻找解决方法。我的目标是在用户控制下将一系列动画串起来。下面是一个演示,其中显示了两个动画模拟吹气球的阶段。如果你点击小气球它的第一个动画在动态更改动画后动画SVG元素

  • 在Chrome浏览器,Firefox和Opera后:它跳转到第二个动画()的最后阶段
  • 在Safari中:它显示动画的开始,但从来没有动画
  • 在Internet Explorer中:我完全不

得到任何动画有一个跨平台的技术,我可以用它来创建动画序列,用户必须在每个动画之间的干预?

<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="500px" height="500px" viewBox="0 0 250 250"> 

    <defs> 
    <path id="one" 
     d="M 0 95 l 30 0 A 20 15 30 1 1 30 105 l -30 0 z" 
     fill="blue"> 
    <animate 
     attributeName="d" 
     attributeType="XML" 
     from="M 0 95 l 30 0 A 20 15 30 1 1 30 105 l -30 0 z" 
      to="M 0 95 l 30 0 A 25 20 0 1 1 30 105 l -30 0 z" 
     dur="1s" 
     fill="freeze" /> 
     </path> 


    <path id="two" 
     d="M 0 95 l 30 0 A 25 20 0 1 1 30 105 l -30 0 z" 
     fill="blue"> 
     <animate 
     attributeName="d" 
     attributeType="XML" 
     from="M 0 95 l 30 0 A 25 20 0 1 1 30 105 l -30 0 z" 
      to="M 0 95 l 30 0 A 50 40 0 1 1 30 105 l -30 0 z" 
     dur="1s" 
     fill="freeze" /> 
    </path> 
    </defs> 

    <use id="a" xlink:href="#one"/> 
    <use xlink:href="#two" transform="rotate(180 125 125)"/> 
</svg> 

<script> 
    var xlinkNS = "http://www.w3.org/1999/xlink" 
    var use = document.querySelector("#a") 

    use.onmouseup = inflate 

    function inflate() { 
    use.setAttributeNS(xlinkNS, "xlink:href", "#two") 
    } 
</script> 

jsFiddle

回答

-3

我会强烈建议Snap.svg

编辑:SVG是强大和复杂。 Snap.svg无论是动态创建还是使用Adobe Illustrator或Sketch等工具,都可以让您控制svg动画。这是一个由同一个人编写的Raphael(另一个svg动画库)编写的跨浏览器解决方案

它使事情变得非常简单,而且使用起来非常棒。因此,我不强烈建议你把握住Snap.svg。至少要遵循链接并检查出来。很酷!

+1

为了让您有资格作为答案,您需要解释如何快照可以解决OP的问题。 –

+0

感谢您的建议。我使用SVG创建非常小的独立HTML文件,因此添加78 KB的开销并不是高优先级。我更愿意理解我可以在纯JavaScript中完成这些工作的最低步骤。 –

+0

这本来应该是一个评论,但由于我的代表低,这是不允许的。那么谁能帮我理解为什么会这样?我得到了投票发布答案,但我不能发表评论...赶上22在这里... –

0

Intenet Explorer根本不支持SMIL动画。

IE的常用推荐解决方法是使用向IE添加SMIL支持的Fakesmile library。它支持beginElement()