Когда вы нажимаете на пузырь, к узлам добавляется класс g-selected
. Это меняет CSS, который применяется с
.g-node .g-democrat {
fill: #c5d7ea;
}
.g-node .g-republican {
fill: #f9caca;
}
в
.g-node.g-selected .g-democrat {
fill: #99c0e5;
stroke: #6081a3;
stroke-width: 1.5px;
}
.g-node.g-selected .g-republican {
fill: #fda4a7;
stroke: #af5e61;
stroke-width: 1.5px;
}
Добавление класса в щелкнутый элемент является довольно простым. Класс добавляется с использованием метода selection.classed
.
node.classed("g-selected", function(d) { return d === topic; });
Если вы смотрите на the source, посмотрите на функцию updateActiveTopic
.
Код в вашей скрипке довольно прост, чем приведенный вами пример. Я хотел бы изменить ту часть, где вы создаете круг элементов, так что он использует CSS, а не встроенный стиль, т.е.
circle {
fill: green;
}
вместо
.style("fill", function (d, i) {
return "green";
})
Теперь мы добавим обработчик щелчка к круги:
circle.on("click", function(d) {
// remove selected class from all circles that have it
circle.classed('selected', false);
//add the selected class to the element that was clicked
d3.select(this).classed('selected', true)
});
и стиль, чтобы выделить круг, когда он выбран
circle.selected {
fill: blue;
stroke: black;
stroke-width: 1.5px;
}
Для получения полного примера см. fiddle.
Можете ли вы опубликовать код, который у вас есть в [jsfiddle] (http://jsfiddle.net)? – BDD
Это [jsfiddle] (http://jsfiddle.net/49L6uj7s/) – salsa111