Добавление элемента в SVG
Здравствуйте.
Есть проблема. Описание: На странице существует svg элемент. <svg> <line x1="10" x2="10" y1="20" y2="20" stroke="orange" /> </svg> Линия нормально отображается! Я хочу скриптом добавить еще одну линию. Внимание вопрос: КАК? Лично у меня innerHTML не помогает, append() не помогает (элемент вставляется в DOM, но графика не перерисовывается). Как быть? Спасибо! |
Держи,когда то игрался день с svg и кросбраузерностью ,событиями и прочим , сам найдёшь блок динамического добавления,лень вырезать и подгонять-со строки 75
качество кода-тестовый вариант <?xml version="1.0"?> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" > <head> <style type="text/css"> #apDiv1 { position:absolute; left:10px; top:14px; width:330px; height:180px; z-index:1; } #apDiv2 { position:absolute; width:100px; height:1px; z-index:1; left: 3px; top: 1px; } </style> <script> <![CDATA[ var obj_tocki={}; obj_tocki.mas=[20,20,50,70,120,150,240,70,300,70]; obj_tocki.over=function (e) { document.getElementById("apDiv2").style.display=""; e = e || window.event; if(e.layerY) { kord_x = e.layerX; kord_y=e.layerY; } else { kord_x = e.offsetX; kord_y = e.offsetY; } for (i=0; i<obj_tocki.mas.length;i=i+2) { if (Math.abs(obj_tocki.mas[i]-kord_x)<=porog && Math.abs(obj_tocki.mas[i+1]-kord_y)<=porog ) { if (f!=100) ukaz[f/2].setAttribute("fill", "green"); f=i; } } if (f!=100) { document.getElementById("apDiv2").style.top=(obj_tocki.mas[f+1]-35)+"px"; document.getElementById("apDiv2").style.left=obj_tocki.mas[f]+"px"; document.getElementById("apDiv2").innerHTML=f; ukaz[f/2].setAttribute("fill", "red") } } obj_tocki.out=function () { document.getElementById("apDiv2").style.display="none"; ukaz[f/2].setAttribute("fill", "green"); } obj_tocki.obraboka=function () { var stroka=""; for (i=0; i<obj_tocki.mas.length;i=i+2) { stroka=stroka+obj_tocki.mas[i]+","+obj_tocki.mas[i+1]+" "; } var canva = document.getElementById("canva"); var line = document.createElementNS("http://www.w3.org/2000/svg", "polyline"); line.setAttribute("points", stroka); line.setAttribute("stroke-width", "3px"); line.setAttribute("fill", "none"); line.setAttribute("stroke", "blue"); canva.appendChild(line); var g=document.createElementNS("http://www.w3.org/2000/svg", "g"); g.setAttribute("fill-opacity", "0.7"); g.setAttribute("fill", "green"); for (i=0; i<obj_tocki.mas.length;i=i+2) { var circle= document.createElementNS("http://www.w3.org/2000/svg", "circle"); circle.setAttribute("cx",obj_tocki.mas[i]+"px"); circle.setAttribute("cy",obj_tocki.mas[i+1]+"px"); circle.setAttribute("r","7px"); g.appendChild(circle); } canva.appendChild(g); ukaz=document.getElementsByTagName('circle'); if(ukaz.length==0) ukaz=document.getElementsByTagName('svg:circle'); } var porog=10; var f=100; var ukaz; ]]> </script> </head> <body> <svg:svg width="330px" height="180px" id="canva"> </svg:svg> <div id="apDiv1"> <div id="apDiv2"></div> </div> <script> <![CDATA[ if (window.addEventListener) { document.getElementById("apDiv1").addEventListener("mousemove", obj_tocki.over, false); document.getElementById("apDiv1").addEventListener("mouseout", obj_tocki.out, false); } else { document.getElementById("apDiv1").attachEvent("onmousemove", obj_tocki.over); document.getElementById("apDiv1").attachEvent("onmouseout", obj_tocki.out); } window.onload=obj_tocki.obraboka(); ]]> </script> </body> </html> |
Спасибо!
Сработало! Ключевой фактор это createElementNS('http://www.w3.org/2000/svg', 'line') , а не createElement('line') как я пытался раньше. Еще раз, спасибо! |
Цитата:
|
Часовой пояс GMT +3, время: 00:12. |