Javascript d3在图表中处理鼠标事件

Javascript d3在图表中处理鼠标事件,javascript,d3.js,pie-chart,Javascript,D3.js,Pie Chart,我正在尝试制作一个交互式的饼图,对鼠标点击做出反应。此时,我可以在单击饼图切片后显示工具提示。但是,如果用户再次单击同一个切片,我如何使其消失 .on("click", function(d) { tooltip.transition() .duration(450) .style("opacity", 0.7); tooltip.html("<b>" + d.name + ": "

我正在尝试制作一个交互式的饼图,对鼠标点击做出反应。此时,我可以在单击饼图切片后显示工具提示。但是,如果用户再次单击同一个切片,我如何使其消失

.on("click", function(d) {   
       tooltip.transition()        
       .duration(450)      
       .style("opacity", 0.7);      
      tooltip.html("<b>" + d.name + ": " + d.value + "</b>")  
      .style("left", (d3.event.pageX) + "px")
      .style("top", (d3.event.pageY-20) + "px");    
     }); 
.on(“单击”,函数(d){
tooltip.transition()
.持续时间(450)
.样式(“不透明度”,0.7);
html(“+d.name+”:“+d.value+”)
.style(“左”,“d3.event.pageX)+“px”)
.样式(“顶部”(d3.event.pageY-20)+“px”);
}); 

如果选择中的数据是对象,则无论选择与否,都可以将其存储在每个基准内。比如说,

.on("click", function(d, i) {   
  if (!d.selected){ 
      tooltip.transition()        
             .duration(350)      
             .style("opacity", 0.9);      
      tooltip.html("<b>" +  stats[i].status + ": " + d.value + "</b>")  
             .style("left", (d3.event.pageX) + "px")
             .style("top", (d3.event.pageY-margin*0.8) + "px");
      d.selected = true;

      // deselect all other arcs 
      arcs.each(function(d, j){
          if (i != j) d.selected = false;
      });
     }
     else {
       tooltip.transition()        
              .duration(200)      
              .style("opacity", 0);
       d.selected = false;
   }
 });                  
.on(“单击”,函数(d,i){
如果(!d.selected){
tooltip.transition()
.持续时间(350)
.样式(“不透明度”,0.9);
html(“+stats[i].status+”:“+d.value+”)
.style(“左”,“d3.event.pageX)+“px”)
.style(“顶部”(d3.event.pageY margin*0.8)+“px”);
d、 所选=真;
//取消选择所有其他圆弧
弧。每个(功能(d,j){
如果(i!=j)d.selected=false;
});
}
否则{
tooltip.transition()
.持续时间(200)
.样式(“不透明度”,0);
d、 所选=假;
}
});                  

请注意,这可确保在选择新圆弧时取消选择所有其他圆弧。

您的意思是我需要为名为“已选”的数据对象添加另一个属性?@user3281466:类似的,是的。您的数据是什么样子的?如果它是一个对象数组,那么我发布的代码示例应该可以工作…嘿,谢谢,它工作了,但是有一个小问题,因为如果我单击一个切片,然后单击另一个切片并返回到第一个切片,那么什么都不会发生,因为它仍然记得它被单击过。。。请参见下面的内容:点击,函数(d){if(!d.selected){tooltip.transition().duration(450).style(“不透明度”,0.7);tooltip.html(“+d.name+”:“+d.value+”).style(“left”,(d3.event.pageX)+“px”).style(“top”,(d3.event.pageY-20)+“px”);d.selected=true;}else{tooltip.transition().duration(250).style(“不透明度”,0);d.selected=false;});我想如果在注册单击并设置d.selected=true时,所有其他切片都应该选择makefalse,那么这是可以解决的……但我不确定这在d3中是否可行。@user3281466:我不确定我是否理解,你能用你的代码做一个标记吗?你肯定可以取消选择所有其他切片,但如果我能看到你的帮助,这会更容易你展示了更多的代码。