Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过单击更改节点的颜色_Javascript_D3.js - Fatal编程技术网

Javascript 通过单击更改节点的颜色

Javascript 通过单击更改节点的颜色,javascript,d3.js,Javascript,D3.js,如何更改节点的颜色?如果单击以前为蓝色的节点,它应该会改变颜色,例如变为紫色。但是,如果我现在单击另一个节点,该节点应变为紫色,先前单击的节点应变为旧颜色(即再次变为蓝色)。我该怎么做 const color = d3.scaleLinear().domain([0, 1]).range(["#03fc90", "#03dbfc"]); var node = svg.append("g") .attr("class&quo

如何更改节点的颜色?如果单击以前为蓝色的节点,它应该会改变颜色,例如变为紫色。但是,如果我现在单击另一个节点,该节点应变为紫色,先前单击的节点应变为旧颜色(即再次变为蓝色)。我该怎么做

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’
  });
  • 在初始渲染时,为每个节点设置默认的
    fill
    样式
  • 单击后,查找以前选定的节点,删除“选定”类并设置默认颜色
  • 对于新节点,设置“选定”类别和颜色
  • const节点=[
    {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(节点,d=>d.id)
    .输入()
    .append('圆')
    .classed('node',true)
    .attr('cx',d=>d.x)
    .attr('cy',d=>d.y)
    .attr('r',20)
    .style('填充','蓝色')
    .style('光标','指针')
    .on('click',onclick节点);
    函数onclick节点(e,d){
    svg.selectAll('.node.selected')
    .classed('selected',false)
    .样式(“填充”、“蓝色”);
    d3.选择(本)
    .classed('selected',true)
    .样式(“填充”、“紫色”);
    }

    使用我创建的方法,节点无法更改其颜色。但我刚把它弄出来。非常感谢。