Я работаю над рендерингом модели с использованием SVG. Я постараюсь предоставить более четкий пример, чем то, над чем я работаю. Скажем, структура данных представляет собой объект JSON следующим образом:Как разместить объект по отношению к другому
vehicle = {
"axles": [
{
"id": 0,
"wheels": [
{
"id": 0,
"diameter": 18
},
{
"id": 1,
"diameter": 18
}
]
},
{
"id": 1,
"wheels": [
{
"id": 0,
"diameter": 18
},
{
"id": 1,
"diameter": 18
}
]
}
]
}
Я хочу, чтобы сделать какую-то форму для транспортного средства, каждую ось, а каждое колесо на этой оси. Я могу успешно нарисовать форму для автомобиля и осей, но не для колес.
(я проигнорирует большинство свойств стайлинг/размер)
var svg = d3.select("body").append("svg");
svg.append("rect").attr("class", "car") // Only 1 car object
svg.selectAll(".car).data(vehicle.axles, function(d){return d.id}) // Render each axle
.append("rect")
Я хочу, чтобы затем «нарисовать колеса» по отношению к положению оси, но применяя данные() до конца Приложение append помещает внутри элемента оси, не отображая его - мне нужно, чтобы элемент колеса находился в родительском элементе вместе с осью, но мне нужно прочитать дочерние данные оси в структуре данных.
Надеюсь, это имело какой-то смысл и что кто-то может помочь.
Отлично! Моя единственная проблема в том, что псевдо-класс hover применяется ко всем предкам элемента при наведении на элемент. Если у меня есть '.car: hover, .axle: hover, .wheel: hover {stroke: blue}', зависание только элемента колеса будет применять псевдо-класс hover к каждому его предку, то есть. ось и автомобиль. Я даже пытался передвинуть элемент колеса от других элементов, так что ничего не перекрывается, и оно все еще происходит. –
EDIT: Я исправил это, ха. Я забыл, что классы стали классами для групп, а не прямым. Изменены селектор стиля на '.car rect: hover, .axle rect: hover, .wheel rect: hover {stroke: blue}' Еще раз спасибо за отличный ответ! –
Вы также можете отключить события на элементе с помощью CSS «pointer-events: none». Это полезно, когда вы укладываете слои и можете игнорировать события на нем (типичным примером являются текстовые метки). – helderdarocha