SVG: moving the mouse to the <image> element raises the mouseout event of the parent <g> element (d3.js)

I have a <g> element with <rect> and <image> inside. <g> has a mouseout event listener. The problem is that when I move the mouse from the rectangle to the image (inside the same g ), the mouseout event is fired (followed by a "mouseover").

Here is an example. (and Jsfiddle )

 var x = 120; var g = d3.select("svg") .append("g") .on('mouseover', function() { d3.select(this).append("text").text("mouseover").attr('transform','translate(0,'+x+')'); x+=20; }) .on('mouseout', function() { d3.select(this).append("text").text("mouseout").attr('transform','translate(0,'+x+')'); x+=20; }) g.append("rect") .attr('width', 100) .attr('height', 100) .style('fill', 'lightgreen') g.append('image') .attr("width", 30) .attr("height", 30) .attr("x", 35) .attr("y", 35) .attr("xlink:href","https://www.gravatar.com/avatar/f70adb32032d39add2559c2609a90d03?s=128&d=identicon&r=PG") 

How to prevent mouseout event from firing?

+4
source share
2 answers

When you use mouseout and mouseover in the parent container, you get events when the mouse moves between descendant elements. If you only want to hear where the mouse enters or leaves the parent, use mouseenter and mouseleave .

+11
source

Using

onpointerleave

solved the problem.

-2
source

Source: https://habr.com/ru/post/1493413/


All Articles