Создание SVG
Суть проста. Есть SVG
<svg onload="createSVG();"> <defs> <script><![CDATA[ var fig = { '1' : {'x' : 10, 'y' : 20, 'fill' : 'red'}, '2' : {'x' : 60, 'y' : 70, 'fill' : 'green'} }; function createSVG(){ /* вот тут как-то правильно с DOM SVG документа надо работать */ svgDoc = svg.contentDocument; fig1 = svgDoc.createElement('use'); // ???? } ]]></script> <g id="figure"> <polygon points="0,0 0,5 5,5 5,0" /> <circle cx="3" cy="3" r="2" /> </g> </defs> <rect x="0" y="0" width="100" height="100" /> <!-- вот тут должен быть результат --> <use xlink:href="#figure" x="10" y="20" fill="red"/> <use xlink:href="#figure" x="60" y="70" fill="green"/> </svg> нужно программно добавить фигурки. в примере выше они добавлены через use. |
svg createElementNS use
be@ver,
<!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> </style> <script> var fig = { '1': { 'x': 10, 'y': 20, 'fill': 'red' }, '2': { 'x': 60, 'y': 70, 'fill': 'green' } }; function createSVG() { var container = document.querySelector('svg'); Object.keys(fig).forEach(function(key) { var attr = fig[key]; var newuse = document.createElementNS("http://www.w3.org/2000/svg", "use"); Object.keys(attr).forEach(function(k) { newuse.setAttributeNS(null, k, attr[k]); }); newuse.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', '#figure'); container.appendChild(newuse) }); } </script> </head> <body> <svg onload="createSVG();"> <defs> <g id="figure"> <polygon points="0,0 0,5 5,5 5,0" /> <circle cx="3" cy="3" r="2" /> </g> </defs> <rect x="0" y="0" width="100" height="100" /> </svg> </body> </html> |
Цитата:
не подскажешь, как добраться до имени файла или параметров его вызова? в SVG в массиве описаны 8 позиций, на которых можно разместить элементы. нужно разместить 4 элемента. как сделать на стороне сервера - понятно. хочу реализовать что-то типа: <img src="01101001.svg"> или <img src="position.svg?pos=01101001"> и скрипт в svg сам, на стороне клиента, расставит элементы только на указанных позициях. |
be@ver,
не понимаю или не знаю, то что вы спросили |
function svgOnLoad(){ var container = document.querySelector('svg'); var txt = document.createElementNS('http://www.w3.org/2000/svg', 'text'); txt.setAttribute('x', '10'); txt.setAttribute('y', '200'); txt.setAttribute('style', 'font-size: 4;'); var t = document.createTextNode("1"); txt.appendChild(t); container.appendChild(txt); } если открыть как svg, то текст добавляется, если открывать html файл с <img src="01101001.svg">, то текст не появляется... |
be@ver,
не могу ничем помочь |
нашел причину:
скрипт внутри svg игнорируется, если svg вставлен как img. Решение: использовать iframe или object |
Часовой пояс GMT +3, время: 13:53. |