4

How can I get the object (for example a node, edge, path or whatever) that is currently under the mouse in d3?

I want to pass mouse over any part of svg and console.log the element.

Spikolynn
  • 4,067
  • 2
  • 37
  • 44
CommonSenseCode
  • 23,522
  • 33
  • 131
  • 186
  • Possible duplicate of [Get element at specified position - JavaScript](http://stackoverflow.com/questions/1259585/get-element-at-specified-position-javascript) – altocumulus Feb 06 '17 at 21:25

2 Answers2

6

D3 doesn't have a native method for this. However, you can combine d3.mouse() with document.elementFromPoint() in a mousemove event:

var svg = d3.select("svg");
svg.on("mousemove", function() {
    var mouse = d3.mouse(this);
    var elem = document.elementFromPoint(mouse[0], mouse[1]);
    console.log(elem.tagName)
})
<script src="https://d3js.org/d3.v4.min.js"></script>
<svg height="150" width="500">
  <rect x="50" y="20" width="150" height="100" style="fill:blue;stroke:pink;stroke-width:5;fill-opacity:0.1;stroke-opacity:0.9"/>
  <ellipse cx="240" cy="50" rx="220" ry="30" style="fill:yellow"/>
  <ellipse cx="220" cy="50" rx="190" ry="20" style="fill:white"/>
  <circle cx="350" cy="50" r="40" stroke="black" stroke-width="3" fill="red" />
  <line x1="0" y1="0" x2="200" y2="200" style="stroke:rgb(255,0,0);stroke-width:4"/>
</svg>
Gerardo Furtado
  • 100,839
  • 9
  • 121
  • 171
-3

Didn't need d3 for this can be done with js and/or jQuery:

$( "body" ).click(function( event ) {
    console.log( "clicked: " + event.target.nodeName, event.target);
});
CommonSenseCode
  • 23,522
  • 33
  • 131
  • 186