SVG:将鼠标移动到<img/>元素会触发父<g>元素的鼠标输出事件(d3.js)</g>

时间:2013-07-25 10:03:43

标签: javascript dom svg d3.js

我的<g>元素包含<rect><image><g>有mouseout事件监听器。问题是当我将鼠标从rect移动到图像(在同一g内)时,会触发mouseout事件(后跟'mouseover')。

这是一个例子。 (和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")

如何防止mouseout事件被触发?

2 个答案:

答案 0 :(得分:11)

当您在父容器上使用mouseout和mouseover时,当鼠标在后代元素之间移动时,您会收到事件。如果您只想听到鼠标进入或离开父母的位置,请改用mouseenter and mouseleave

答案 1 :(得分:-2)

使用

onpointerleave

解决了问题。