2015-05-21 2 views
3

У меня есть несколько групп svg, и каждая группа имеет в них несколько детей.Как получить перевод собственности из группы?

В случае click на group Я хотел бы переместить все свои группы вместе со своими детьми. Я хотел бы знать свойства translate группы clicked, поэтому я могу перемещать другие группы.

Я пытаюсь получить имущество translate, но не смог его получить.

Это то, что я пробовал:

var svg = d3.select('body').append('svg').attr({width:300,height:300});  
var group = svg.append('svg:g').attr({ 
    'width':100, 
    'height':100, 
    'transform' : 'translate(50, 50)' 
}); 

group.append('circle').attr({'r':30}); 

group.on('click', function() { 
    console.log(this); //how to get the translated properties? 
}); 

Jsfiddle

ответ

2

Ответ Роберта уже охватывает вопрос о том, как решить проблему, но вот способ D3 сделать это дополнительно. В частности, вы можете использовать d3.transform() разобрать значение атрибута transform:

var t = d3.transform(d3.select(this).attr("transform")); 
console.log(t.translate); 

Обновлено jsfiddle here;

1

Вы можете использовать GetAttribute например,

this.getAttribute("transform") 

или SVG DOM

this.transform.baseVal.getItem(0).matrix.e + ", " + this.transform.baseVal.getItem(0).matrix.f) 

baseVal.numberOfItems получает вас сколько компонентов есть для преобразования и getItem(0).type получает свой тип т.е. 2 = перевод в этом случае.

This оповещения 50, 50 для меня на Firefox.

+0

Можете ли вы, пожалуйста, обновить мою «jsfiddle», пожалуйста? потому что я не получаю значения как объект. вместо этого я получаю как 'translate (50, 50)' от этой строки, как получится каждая из 'x' и' y' (которая равна x и y) – 3gwebtrain

+0

Если вы хотите, чтобы они были объектами, вы хотите SVG DOM, это вторая альтернатива, которую я дал в своем ответе. –

+0

Да, я пробовал использовать «2», ничего не утешило. Можете ли вы обновить скрипку, пожалуйста? – 3gwebtrain

Смежные вопросы