2015-10-17 19 views
0

我實際上有兩列我添加的文本,如下所示。如何在d3中的項目對上執行鼠標懸停事件?

如果我選擇所有.labels並在「this」上執行鼠標懸停功能,那麼該功能將僅對鼠標下文本中的文本進行操作。

問:如何在mouseover函數上編寫這樣的動作,以便在「this」整行(兩列)上發生?

我有一種感覺,這種理想的行爲將要求我以不同的方式輸入文字...... ???

任何指導表示讚賞。

//column 1 
svg.selectAll("labels") 
    .data(data) 
    .enter() 
    .append("text") 
    .attr("class", "labels") 
    .attr("x", function(d) { 
     if (xValue(d) < 0) { 
      return xScale(xValue(d)) - 15; 
      } 
      else { 
       return xScale(0) - 15; 
       } 
     }) 
    .attr("y", function(d) { return yScale(yValue(d)); }) 
    .attr("text-anchor", "end") 
    .attr("dy", ".35em") 
    .text(function(d) { return d.lineitem + " " + parseFloat(d.diff).toFixed(1); }); 

//column 2 
svg.selectAll("labels") 
    .data(data) 
    .enter() 
    .append("text") 
    .attr("class", "labels") 
    .attr("x", xScale(d3.max(data, xValue)) + 50) 
    .attr("y", function(d) { return yScale(yValue(d)); }) 
    .attr("dy", ".35em") 
    .text(function(d) { return parseFloat(d.time0).toFixed(1); }); 
+0

請將您的html發帖 –

+0

當然可以。這裏是。 @ Susheel-Singh http://plnkr.co/edit/gdTkyjkoi0IHAzsaXHRG?p=catalogue – user2962397

回答

3

試試這個方法。

//column 1 
svg.selectAll(".labels") 
    .data(data) 
    .enter() 
    .append("text") 
    .attr("id",function(d,i){ return "column1_"+i; }) //Add a unique id with it's column name 
    .attr("class", "labels") 
    .attr("x", function(d) { 
     if (xValue(d) < 0) { 
      return xScale(xValue(d)) - 15; 
      } 
      else { 
       return xScale(0) - 15; 
       } 
     }) 
    .attr("y", function(d) { return yScale(yValue(d)); }) 
    .attr("text-anchor", "end") 
    .attr("dy", ".35em") 
    .text(function(d) { return d.lineitem + " " + parseFloat(d.diff).toFixed(1); }); 

//column 2 
svg.selectAll(".labels") 
    .data(data) 
    .enter() 
    .append("text") 
    .attr("class", "labels") 
    .attr("id",function(d,i){ return "column2_"+i; }) //Add a unique id with it's column name 
    .attr("x", xScale(d3.max(data, xValue)) + 50) 
    .attr("y", function(d) { return yScale(yValue(d)); }) 
    .attr("dy", ".35em") 
    .text(function(d) { return parseFloat(d.time0).toFixed(1); }); 

svg.selectAll(".labels").on("mouseover,funtion(d,i){ 
    d3.select("#column1_"+i).style("opacity",0.2); //Perform the same action on text in column1 
    d3.select("#column2_"+i).style("opacity",0.2); //Perform the same action on text in column2 
}); 
+0

我得到你想要做的 - 我應該想到的!不幸的是,我無法讓on()正常工作。檢查元素確實顯示ID已正確添加。我有這個:svg.selectAll(「labels」) .on(「mouseover」,function(d,i){ d3.select(「column1 _」+ i) .style(「opacity」,.2); }); – user2962397

+0

對不起。我的錯。選擇器應該是'.labels'。試試'd3.selectAll(「。labels」)'。更新了答案。還要在ID名稱前面添加#名稱'd3.select(「#column1 _」+ i)'。 – Gilsha

+0

是的 - 我也試過。標籤不會在懸停時觸發警報(),但沒有文本會更改不透明度。 :/我以前用d3.select(this)來做。我可以指定「this」以及id嗎? – user2962397