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:我不确定我是否理解,你能用你的代码做一个标记吗?你肯定可以取消选择所有其他切片,但如果我能看到你的帮助,这会更容易你展示了更多的代码。