2017-07-24 60 views
0

我正在使用畫布和d3繪製〜130,000點的地圖。 我想要一個工具提示在地圖的位置上顯示數據。但是我沒有看到工具提示和控制檯日誌。onMouseOver事件不適用於畫布/ d3(工具提示)

我在虧損,任何幫助,將不勝感激:)

function createMap(dataset) { 

    var dataBinding = locations.selectAll("points.arc") 
    .data(dataset) 

     .enter() 
     .append("points") 
     .classed("arc", true) 
     .attr("x", function(d) {return projection([d.y,d.x])[0]}) 
     .attr("y", function(d) {return projection([d.y,d.x])[1]}) 
     .attr("radius", 1) 
     .attr("fillStyle", "rgba(250, 80, 80, 1)") 
     //onmouse over 
     .on("mouseover", function(d) { 
     console.log("mouse over"); 
     div.transition()   
      .duration(200) 
      .style("opacity", .9);  
     div .html(d.y + "<br/>" + d.x) 
      .style("left", (d3.event.pageX) + "px")  
      .style("top", (d3.event.pageY - 28) + "px"); 

     })    
     .on("mouseout", function(d) {  
      div.transition()   
       .duration(500)  
       .style("opacity", 0); 
     }); 

    drawCanvas(); 
} 
+0

沒有控制檯日誌,那麼它意味着它永遠不會進入鼠標懸停功能。您確定要使用附加(「分數」)嗎? –

+0

追加點工作得很好。它後來轉化爲畫布弧。 據我所知,最好的方法是使用XY值,但我不確定它有多精確。 –

+0

你使用畫布嗎?我懷疑,因爲「點」不是一個普通的HTML元素,這可能是原因...但我不知道 –

回答

0

從與你討論,我覺得帆布爲基礎編制的D3是不是與通常的鼠標事件的支持。我的信息來源:

https://bocoup.com/blog/d3js-and-canvas

引述重要組成部分:

如果你一直在關注,你可能會問自己現在 「怎麼樣的鼠標事件?」好決定。可悲的是,這種方法不允許我們使用精彩的事件監聽器,我們通常可以將 附加到選擇並做出反應。我們可以做的最多的事情是將一個 鼠標監聽器附加到畫布元素本身,獲取指針的x座標和y座標,然後繼續自己解決這個問題。