Monday, June 3, 2024
 Popular · Latest · Hot · Upcoming
138
rated 0 times [  144] [ 6]  / answers: 1 / hits: 17589  / 15 Years ago, tue, march 30, 2010, 12:00:00

I've dynamacally added the circle elements to the svg displayed in a iFrame. Chrome isnt showing the new elements, not tried FF yet. Is there somekind of redraw/refresh I need to call? The first circle is actually in the svg document, the rest come from script.



<iframe id=svgFrame src=xmlfile1.svg width=300 height=300>
<svg xmlns=http://www.w3.org/2000/svg id=SVG1 width=200 height=200>
<circle cx=20 cy=20 r=5/>
<circle cx=165 cy=80 r=32/>
<circle cx=15 cy=38 r=32/>
<circle cx=140 cy=39 r=30/>
<circle cx=178 cy=32 r=22/>
...etc
<circle cx=166 cy=130 r=16/>
</svg>
</iframe>


The javascript which creates the elements:



function RandomNumber(min, max) {
var r;
r = Math.floor(Math.random() * (max - min + 1)) + min;
return r;
}

var svg = document.getElementById(svgFrame).contentDocument;

for (var i = 0; i < 99; i++) {

var n = svg.createElement(circle);
n.setAttribute(cx , RandomNumber( 0 , 200) );
n.setAttribute(cy , RandomNumber(0, 200) );
n.setAttribute(r , RandomNumber(5, 35) );

svg.documentElement.appendChild(n);
}

More From » svg

 Answers
39

I haven't tried what you are doing where you essentially have two sources but I do know Chrome doesn't need a refresh/redraw when dynamically adding content.



Here is my code maybe this will help you.



xmlns = http://www.w3.org/2000/svg;
var C = document.createElementNS(xmlns,circle);
C.setAttributeNS(null, cx, cx);
C.setAttributeNS(null, cy, cy);
C.setAttributeNS(null, r, rad);
document.getElementById(background).appendChild(C);


Where background is just the id of a group (g tag)


[#97211] Friday, March 26, 2010, 15 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
mitchell

Total Points: 95
Total Questions: 110
Total Answers: 87

Location: Gabon
Member since Thu, Jul 15, 2021
3 Years ago
;