Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.12.2011, 20:26
Интересующийся
Отправить личное сообщение для jazzz13 Посмотреть профиль Найти все сообщения от jazzz13
 
Регистрация: 31.05.2011
Сообщений: 25

Добавление элемента в SVG
Здравствуйте.
Есть проблема. Описание:

На странице существует svg элемент.
<svg>
    <line x1="10" x2="10" y1="20" y2="20" stroke="orange" />
</svg>

Линия нормально отображается!

Я хочу скриптом добавить еще одну линию. Внимание вопрос: КАК?

Лично у меня innerHTML не помогает, append() не помогает (элемент вставляется в DOM, но графика не перерисовывается).

Как быть? Спасибо!
Ответить с цитированием
  #2 (permalink)  
Старый 21.12.2011, 21:07
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

Держи,когда то игрался день с 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>

Последний раз редактировалось dmitriymar, 21.12.2011 в 21:39.
Ответить с цитированием
  #3 (permalink)  
Старый 22.12.2011, 10:24
Интересующийся
Отправить личное сообщение для jazzz13 Посмотреть профиль Найти все сообщения от jazzz13
 
Регистрация: 31.05.2011
Сообщений: 25

Спасибо!
Сработало!

Ключевой фактор это createElementNS('http://www.w3.org/2000/svg', 'line') , а не createElement('line') как я пытался раньше.

Еще раз, спасибо!
Ответить с цитированием
  #4 (permalink)  
Старый 22.12.2011, 11:09
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

Сообщение от jazzz13
createElement('line')
работает ,но не кросбраузерно,и только с соответствующим заголовком

Последний раз редактировалось dmitriymar, 22.12.2011 в 11:35.
Ответить с цитированием
Ответ


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание SVG элемента и вставка на страницу FINoM Events/DOM/Window 3 13.09.2015 16:47
добавление дочернего элемента stalker77 Общие вопросы Javascript 5 31.08.2011 21:58
SVG добавление дочернего элемента zaytsewa Общие вопросы Javascript 14 16.06.2011 12:48
добавление элемента формы sc2r2bey Элементы интерфейса 3 15.06.2010 16:20
Добавление элемента и работа с ним nvbn Events/DOM/Window 13 07.07.2008 19:07