2015-10-22 112 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()