Javascript 在Opera中按坐标定位SVG中的元素

Javascript 在Opera中按坐标定位SVG中的元素,javascript,svg,opera,Javascript,Svg,Opera,给定坐标,如何在Opera中的SVG中定位元素 elementFromPoint(x,y)在Firefox中运行良好,但在Opera中似乎失败了,总是返回整个SVG,而不是特定的元素 有人可能会想为什么我需要它。这仅仅是因为我想突出显示光标下的SVG元素,并且因为Opera在使用鼠标移动之前,在添加/删除光标下的元素时不会触发任何事件。 也就是说,当我添加一个新元素时,在我轻轻移动鼠标之前,它不会高亮显示,这看起来不太好 干杯, 米哈伊尔。歌剧中有SVG1.1 [未经测试的代码,甚至可能有效。]

给定坐标,如何在Opera中的SVG中定位元素

elementFromPoint(x,y)在Firefox中运行良好,但在Opera中似乎失败了,总是返回整个SVG,而不是特定的元素

有人可能会想为什么我需要它。这仅仅是因为我想突出显示光标下的SVG元素,并且因为Opera在使用鼠标移动之前,在添加/删除光标下的元素时不会触发任何事件。 也就是说,当我添加一个新元素时,在我轻轻移动鼠标之前,它不会高亮显示,这看起来不太好

干杯,
米哈伊尔。

歌剧中有SVG1.1


[未经测试的代码,甚至可能有效。]

中演示了一种无需自己查找光标下的元素即可完成任务的方法。基本上,您将mouseover事件的事件处理程序绑定到根文档元素,然后检查事件的目标以找出哪个元素实际接收了事件


对于生产代码,您应该添加逻辑以处理元素是
引用的情况(通过使用target.correspondingUseElement查找id)。

工作正常,非常感谢!“svg”变量实际上是“element”变量。对于getPageXY,我使用了来自的脚本,是否有人感兴趣。
var element= document.elementFromPoint(pageX, pageY);
if (element.localName.toLowerCase()=='svg' && 'getIntersectionList' in element) {
    var svgxy= Element_getPageXY(svg); // by the usual offsetLeft/offsetParent etc. method
    var rect= svg.createSVGRect();
    rect.x= pageX-svgxy[0];
    rect.y= pageY-svgxy[1];
    rect.width=rect.height= 1;
    var hits= svg.getIntersectionList(rect, null);
    if (hits.length>0)
        element= hits[hits.length-1];
}