Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.01.2017, 17:03
Интересующийся
Отправить личное сообщение для be@ver Посмотреть профиль Найти все сообщения от be@ver
 
Регистрация: 24.11.2016
Сообщений: 11

Создание 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.

Последний раз редактировалось be@ver, 06.01.2017 в 17:05.
Ответить с цитированием
  #2 (permalink)  
Старый 06.01.2017, 19:45
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

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>
Ответить с цитированием
  #3 (permalink)  
Старый 07.01.2017, 08:51
Интересующийся
Отправить личное сообщение для be@ver Посмотреть профиль Найти все сообщения от be@ver
 
Регистрация: 24.11.2016
Сообщений: 11

Сообщение от рони Посмотреть сообщение
var newuse = document.createElementNS("http://www.w3.org/2000/svg", "use");
newuse.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', '#figure');
спасибо. буду знать )))))


не подскажешь, как добраться до имени файла или параметров его вызова?
в SVG в массиве описаны 8 позиций, на которых можно разместить элементы. нужно разместить 4 элемента.
как сделать на стороне сервера - понятно. хочу реализовать что-то типа:
<img src="01101001.svg"> или <img src="position.svg?pos=01101001">
и скрипт в svg сам, на стороне клиента, расставит элементы только на указанных позициях.

Последний раз редактировалось be@ver, 07.01.2017 в 10:36.
Ответить с цитированием
  #4 (permalink)  
Старый 07.01.2017, 11:34
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

be@ver,
не понимаю или не знаю, то что вы спросили
Ответить с цитированием
  #5 (permalink)  
Старый 07.01.2017, 13:04
Интересующийся
Отправить личное сообщение для be@ver Посмотреть профиль Найти все сообщения от be@ver
 
Регистрация: 24.11.2016
Сообщений: 11

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">, то текст не появляется...
Ответить с цитированием
  #6 (permalink)  
Старый 07.01.2017, 15:27
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

be@ver,
не могу ничем помочь
Ответить с цитированием
  #7 (permalink)  
Старый 08.01.2017, 13:18
Интересующийся
Отправить личное сообщение для be@ver Посмотреть профиль Найти все сообщения от be@ver
 
Регистрация: 24.11.2016
Сообщений: 11

нашел причину:
скрипт внутри svg игнорируется, если svg вставлен как img. Решение: использовать iframe или object
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как лучше подключать SVG объект Black_Star (X)HTML/CSS 0 02.12.2016 00:09
Создание SVG элемента и вставка на страницу FINoM Events/DOM/Window 3 13.09.2015 16:47
SVG CSS, SVG to WOFF kobezzza Firefox/Mozilla 2 29.03.2013 15:59
Inline SVG as background Paguo-86PK Элементы интерфейса 0 16.12.2011 20:12
Простой графический движок: SVG vs Canvas stryaponoff Общие вопросы Javascript 5 29.06.2010 16:59