2013-10-03 60 views
2

最終,這是針對Kiosk風格的應用程序(使用jQuery 1.6.4),可以在Firefox中運行,所以答案可以是Firefox特定的。哪個SVG/SMIL DOM元素具有`beginElement`方法?

我試圖做一個動畫SVG,但我試圖動態插入SMIL動畫。我沒有看到任何跡象表明它不能完成,並且http://satreth.blogspot.ch/2013_01_01_archive.htmlhttp://srufaculty.sru.edu/david.dailey/svg/SMILorJavaScript.svg似乎表明它可以完成。

問題據我所知,我需要調用beginElement方法來啓動動態插入的動畫,但我沒有看到它的任何地方。

這裏有一個小提琴演示問題:http://jsfiddle.net/2pvSX/

在標題失敗的問題的答案:

  1. 我在做什麼錯?
  2. 有沒有任何資源可以更好地理解我想要做什麼?

,這是一個問題:

  1. 如何我定義SVG?
  2. 我如何創建SMIL?
  3. 我如何訪問SVG?
  4. 我如何插入SMIL?
  5. 完全是其他嗎?

最後,有沒有更好的方法來動畫SVG?

回答

3

你需要添加'http://www.w3.org/2000/svg'創建這樣

$(document).ready(function() { 
    var svg = $('svg').get(0), 
    square = svg.getElementById('red'), 
    animation = document.createElementNS('http://www.w3.org/2000/svg', 'animateMotion'); 
    animation.setAttributeNS(null, 'id', 'walker'); 
    animation.setAttributeNS(null, 'begin', 'indefinite'); 
    animation.setAttributeNS(null, 'end', 'indefinite'); 
    animation.setAttributeNS(null, 'dur', '10s'); 
    animation.setAttributeNS(null, 'repeatCount', 'indefinite'); 
    animation.setAttributeNS(null, 'path', 'M 0 0 H 800 Z'); 
    square.appendChild(animation); 
    console.log(animation); 
    console.log(typeof animation.beginElement); 
    animation.beginElement();  
});  

動畫元素也刪除此行animation = svg.children[1].children[0].children[1];所以動畫元素有beginElement功能
http://jsfiddle.net/2pvSX/1/

+0

他是我爲什麼這個作品清晰,我需要確保'animateMotion'元素與SVG共享相同的名稱空間,否則它將無法工作?還是有其他原因? – pete

+0

是的,它需要使用相同的名稱空間創建,否則它將與使用createElement創建元素相同 –