2014-06-20 3 views
2

마우스 클릭에 반응하는 대화 형 원형 차트를 만들려고합니다. 지금은 파이 슬라이스를 클릭하면 툴팁을 올릴 수 있습니다. 그러나 사용자가 동일한 슬라이스를 다시 클릭하면 어떻게 사라지게 할 수 있습니까?d3 차트의 마우스 이벤트 처리

.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");  
    }); 

답변

1

선택 항목의 데이터가 객체 인 경우 선택한 각 데이터 내에서 저장할 수 있습니다. 예를 들어,

.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; 
    } 
});     

새 호를 선택할 때 다른 모든 호가 선택 취소됩니다.

+0

'selected'라는 데이터 개체에 다른 속성을 추가해야한다는 의미입니까? – user3281466

+1

@ user3281466 : 그와 비슷한 것, 예. 귀하의 데이터는 어떻게 생겼습니까? 그것이 객체의 배열이라면 내가 게시 한 코드 샘플보다 ... – mdml

+0

이봐, 고마워,하지만 작은 문제가있다. 하나의 슬라이스를 클릭하고 다른 슬라이스를 클릭하면 첫 번째 슬라이스로 돌아가서 클릭하면 여전히 기억되는 것처럼 아무 일도 일어나지 않습니다. 아래 참조 : on ("click", function (d) { if (! d.selected) { tooltip.transition() . 지속 시간) .style ("불투명"0.7) tooltip.html (""+ d.name + ""+ d.value + "") .style ("왼쪽", (d3.event. pageX) + "px") .style ("top", (d3.event.pageY-20) + "px"); d.selected = true; } else {tooltip.transition() . 지속 시간 (250) .style ("opacity", 0); d.selected = false;} }); – user3281466