#javascript #d3.js
Вопрос:
Как я могу изменить цвет своего узла? Если я нажму на узел, который ранее был синим, он должен изменить цвет, например, на фиолетовый. Но если я сейчас нажму на другой узел, этот узел должен стать фиолетовым, а ранее нажатый узел должен получить старый цвет (т. Е. Снова стать синим). как мне это сделать?
const color = d3.scaleLinear().domain([0, 1]).range(["#03fc90", "#03dbfc"]);
var node = svg.append("g")
.attr("class", "nodes")
.selectAll("circle")
.data(dataset.nodes)
.enter()
.append("circle")
.attr("r", 5)
.style("fill", function(d,i) {
return color(i);})
.on("click", (evt, currentNode) => {
d3.select(this).
.style.color=’purple’
});
Комментарии:
1. С помощью метода, который я создал, узел не мог изменить свой цвет. Но я только что это выяснил. Спасибо.
Ответ №1:
- При начальной визуализации установите
fill
стиль по умолчанию для каждого узла. - По щелчку мыши найдите ранее выбранный узел, удалите «выбранный» класс и установите цвет по умолчанию
- Для нового узла установите «выбранный» класс и цвет
const nodes = [
{id: 1, x: 50, y: 50},
{id: 2, x: 50, y: 100},
{id: 3, x: 100, y: 75},
];
const svg = d3.select('svg');
svg.selectAll('circle.node')
.data(nodes, d => d.id)
.enter()
.append('circle')
.classed('node', true)
.attr('cx', d => d.x)
.attr('cy', d => d.y)
.attr('r', 20)
.style('fill', 'blue')
.style('cursor', 'pointer')
.on('click', onClickNode);
function onClickNode (e, d) {
svg.selectAll('.node.selected')
.classed('selected', false)
.style('fill', 'blue');
d3.select(this)
.classed('selected', true)
.style('fill', 'purple');
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/6.7.0/d3.min.js"></script>
<svg />