Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在重叠元素上注册鼠标事件_Javascript_Svg_D3.js_Mouseevent - Fatal编程技术网

Javascript 在重叠元素上注册鼠标事件

Javascript 在重叠元素上注册鼠标事件,javascript,svg,d3.js,mouseevent,Javascript,Svg,D3.js,Mouseevent,在我的svg图像中,我绘制了许多路径(和其他元素),其中一些部分是透明的,可能相互重叠 如何确保所有元素的侦听器接收到鼠标事件(如单击),而不仅仅是最上面的元素 基本示例(假设A、B、C具有相同的坐标和尺寸): 在本例中,期望的结果是侦听器在a、B、C上注册单击矩形C(最上面的) 通过使用google,我了解到我可以通过向父元素注册一个侦听器,然后检查受影响的子元素来发送事件,但是我想知道是否有更好的解决方案或库。使用jquery++可以找到哪些元素位于给定位置,即使它们位于其他元素之后,你

在我的svg图像中,我绘制了许多路径(和其他元素),其中一些部分是透明的,可能相互重叠

如何确保所有元素的侦听器接收到鼠标事件(如单击),而不仅仅是最上面的元素

基本示例(假设A、B、C具有相同的坐标和尺寸):


在本例中,期望的结果是侦听器在a、B、C上注册单击矩形C(最上面的)


通过使用google,我了解到我可以通过向父元素注册一个侦听器,然后检查受影响的子元素来发送事件,但是我想知道是否有更好的解决方案或库。

使用jquery++可以找到哪些元素位于给定位置,即使它们位于其他元素之后,你可以做一些简单的事情,比如:

$("#parent").on("click",function(ev){
    $(this).children().within(ev.offsetX,ev.offsetY)...; //filter the elements
});

AFAIK这是唯一的解决方案。如果较低的元素被其他元素重叠,那么它们将无法获得单击事件。我看到了这个库,但还没有机会尝试它。这可能很合适。这是个好主意,但我一直无法在SVG工作。查看他们的示例并与我的版本进行比较,我只使用SVG矩形替换了div:我认为您需要在函数中传递事件对象。
$("#parent").on("click",function(ev){
    $(this).children().within(ev.offsetX,ev.offsetY)...; //filter the elements
});