给定位置(x,y)获取SVG元素的最快方法是什么?

时间:2014-09-02 20:11:30

标签: javascript jquery svg d3.js

我会用

var element = document.elementFromPoint(x, y);

从原始SVG获取SVG元素。但是在运行我的代码时,网络会放在原始SVG上。所以它返回网络顶点,而不是后面的svg元素。

即使我有修改后的原始SVG,找到svg元素是网络中每个顶点的最快方法是什么?

所以我有圆圈(顶点)和背景形状。我需要得到一个圆(顶点)后面的背景元素。我也有每个顶点的所有(x,y)位置。

我使用jquery看到了这个解决方案:

$("svg").find("[x='10'][y='10']");

返回此位置上的所有元素。但它看起来计算成本很高,因为我需要在力布局(d3.js)的每次交互中计算超过1000个顶点。 力总是处于活动状态,用户需要使用鼠标与顶点进行交互。

这是一个例子:

example

我想知道每个节点在哪个方格,我只知道节点位置。

2 个答案:

答案 0 :(得分:1)

使你想要的元素忽略(即网络)指针 - 事件="无"

答案 1 :(得分:1)

您可能需要的是最近邻算法。 Mike Bostock有一个很好的例子here.

最近邻居在O(log(n))中运行,并允许任何导致点位置出现问题的舍入错误。

如果您的节点没有移动,您还可以考虑将后SVG元素添加到网络中节点的数据(假设您已使用d3定义了网络),之后您可以直接引用来自数据的SVG元素,而不是寻找它。如果你没有使用d3构建网络,jquery也有一个.data方法。