2011-12-10 17 views
10

Sulla base di this codice, sto cercando di animare un elemento SVG generati dinamicamente:SVG animate con elementi aggiunti dinamicamente

var svgnode = document.createElementNS('http://www.w3.org/2000/svg','svg'); 
var circle = document.createElementNS('http://www.w3.org/2000/svg','circle'); 
circle.setAttribute("cx", "10"); 
circle.setAttribute("cy", "10"); 
circle.setAttribute("r", "10"); 
circle.setAttribute("fill", "blue"); 
var ani = document.createElementNS("http://www.w3.org/2000/svg","animateTransform"); 
ani.setAttribute("attributeName", "transform"); 
ani.setAttribute("attributeType", "xml"); 
ani.setAttribute("type", "translate"); 
ani.setAttribute("from", "10"); 
ani.setAttribute("to", "100"); 
ani.setAttribute("begin", "0s"); 
ani.setAttribute("dur", "2s"); 
ani.setAttribute("fill", "freeze"); 
circle.appendChild(ani); 
svgnode.appendChild(circle); 
document.getElementById('mydiv').appendChild(svgnode); 

l'SVG si presenta bene, ma l'animazione non funziona. Se scrivo il codice equivalente in semplice HTML/SVG funziona. Sto usando Chrome.

+2

Si sta lavorando, sotto Chrome v15 http://jsfiddle.net/SF5nE/ – Bakudan

+1

aggiornato e funziona - grazie! – Hendekagon

risposta

5

Non funzionerebbe se aggiunto dinamicamente in seguito su chrome (funzionerebbe con FF).

vedere http://jsfiddle.net/tap0ri/SF5nE/2/

questo è sembra essere Chrome bug.

+0

sì, questo è molto fastidioso perché significa che non è possibile attivare animazioni in risposta ai messaggi da un server – Hendekagon

+0

Ho provato l'hack con la creazione di un po 'di "svg pool" su document.ready e vorrei usare qualsiasi svg per aggiungere dinamicamente elementi all'interno esso. – Chetan

+0

per favore elaborare ... – Hendekagon

-1

non lavori su entrambi i navigatori con viewBox = "0 0 0 0".

lavora qui:

<div id="mydiv"> 
    <svg id="svgNode" version="1.1" width="100%" height="100%" viewBox="0 0 100% 100%" preserveAspectRatio="xMidYMid meet" id="ext-element-180"></svg> 
</div> 

vedi: https://jsfiddle.net/oOroBax/xkb89y4h/

+0

Cosa c'entra questo con la domanda? –

0

ho ancora lo stesso problema di 5 anni fa :) (e con SVG-filtro troppo)

io uso follow mod:

1. Ho impostato tutti gli attributi may con setAtteribute, ad esempio ani.setAttr ibute ("attributeName", "transform");

2. Ho letto e impostato il mio innerHTML SVG-root: $ svgRoot.html ($ svgRoot.html());

Speranza che aiuta qualcuno, o qualcuno mi può dire un modo migliore :)

Problemi correlati