2011-05-16 12 views
17

JavaScript kullanarak oluşturulacak svg nesnesinin içinde bazı (çok fazla) nesne olması planlıyorum. , Fare üzerinde, fare-out tıklayın:Svg nesnelerinin içindeki özel veriler nasıl saklanır?

Kullanıcı onlarla farklı aktiviteler yapacağız. Herhangi bir olay meydana geldiğinde, nesnel olan bazı verilerin gösterilmesi gerekir.

Soru: nasıl nesneyle ilgili verileri almak için? Örneğin, kullanıcı "Make A" aracını temsil eden dikdörtgene tıkladı (her biri ayrı bir marka olan birkaç dikdörtgen var). Bir kalıbı nasıl belirleyebilirim? 'Dış veri' svg nesnelerle ilişkilendirmek için herhangi bir yolu var mı? Ben böyle bir şekilde her öğe için 'kimlik' üretebilir öğelerle svg-nesneyi doldurma sırasında:

cevap

0

Bir çözüm kendim bkz "makea", "makeB", "car_id_10", "bike_id_20". .. vb Ve etkinliği hedef kodu oluşturulacaktır olay dinleyicisi de, bu iyi bir fikir

mi ... nesneleri tanımlamak alacak özel diziye girer? Emin ...

+0

Illustrator? –

3

Basit javascript değişkeni oluşturulmuş bir SVG nesnesine bir başvuru saklayabilir. Bir şekil oluştururken Yani, bunu yapabilirsiniz:

myRect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); 

Şimdi SVG nesnenin bir şekle başvuru var. Ancak onları etkileşimli yapmak istiyorsanız, nesneye bunun gibi nitelikler eklemeniz gerekir. JsFunc() işlevi önceden tanımlanmış bir işlevdir. Şimdi

myRect.onclick = function(){jsFunct(this, otherArg);} 

Yalnızca değişkene referansına sahip olamaz, ama kullanımı yoluyla bu tür alternatif kullanarak fonksiyonu jsFunc değişkeni kendisi geçmek: Ayrıca, olayları bu şekilde ayarlayabilirsiniz, işleri kolaylaştırmak için işaretçinin bu.

Eğer dikdörtgenler bir sürü oluşturmak varsa, tek bir Array saklayabilir, böylece bir dizin kullanarak her eleman erişebilir: Bir mülkün olsun

myRect = new Array(); 
for(i = 1; i <= numMakes; i = i + 1){ 
    myRect[i] = document.createElementNS("http://www.w3.org/2000/svg", "rect"); 
} 

hatırla veya

fillColor = myRect.getAttribute("fill"); 
x = myRect.getAttribute("x"); 

ve benzeri: nesnenizin nitelik, böyle fonksiyon getAttribute kullanabilirsiniz.

Yeni değişken türü nesne oluşturmak ve bir üye svg şekli olduğunu kurmak ve üyelerin geri kalanı özelleştirilmiş veri alanları vardır başladı.

var myRect = new Object(); 
myRect.shape = document.createElementNS("http://www.w3.org/2000/svg", "rect"); 
myRect.customField = myValue; 
+1

Üzgünüm, ama hala rect nesnesinin içinde özel verilerin nasıl saklanacağını anlamıyorum ..? Açıklar mısınız? Teşekkürler. – Budda

+0

Yeni bir değişken türü nesnesi oluşturabilir ve bir üyenin svg şekli olduğunu ve üyelerin geri kalanının özelleştirilmiş veri alanlarınız olduğunu belirtebilirsiniz. –

+1

Tamam, ancak bu üst nesneyi bir şekil kullanarak nasıl belirleyebilirim? Ana nesneler dizisinden geçmeyi ve hangisinin formumu içerdiğini algılamayı teklif ediyor musunuz? – Budda

14

Tıklama/mouseover/etc-işleyici olsun Event nesne öğesidir target adlı bir özelliğe sahiptir (herhangi bir EventTarget teknik olarak ancak bu durumda element) olay ilk sevk edildiğini .

Özel verileri depolamanın bir yolu, adlandırılmış özellikleri kullanmaktır. Özniteliklerinizi adlandırabilmenizin nedeni, varolan veya gelecekteki svg öznitelikleriyle çakışabilecekleridir.İşte

bir örnek: SVG DOM düzenli kullanan düğümlerin üzerinde

var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); 
rect.setAttributeNS("http://www.example.com/yourcustomnamespace", "data", "whatever-data-you-want-here"); 
rect.addEventListener("click", myclickhandler, false); 
... 

function myclickhandler(evt) 
{ 
    var target = evt.target; 
    // specialcase for use elements 
    if (target.correspondingUseElement) 
    target = target.correspondingUseElement; 
    alert(target); 
    alert(target.getAttributeNS("http://www.example.com/yourcustomnamespace", "data")) 
} 
0

DOM Elem "Normal" html koduna girebileceğiniz gibi sadece dizeleri değil, özniteliklerde saklanan rasgele nesneler olabilir.

someSVGElement.setAttribute("myApp.car.model", Global.Car.Models.mercedes"); 

Ayrıca, jquery 3 itibariyle jquery svg elemanları üzerindeki .Data (...) yöntemi (https://api.jquery.com/jquery.data/) destekleyen i im Adobe'den bir svg oluşturarak, bu yaklaşımı nasıl kullanabileceğinizi söyleyebilir

İlgili konular