我会用
var element = document.elementFromPoint(x, y);
从原始SVG获取SVG元素。但是在运行我的代码时,网络会放在原始SVG上。所以它返回网络顶点,而不是后面的svg元素。
即使我有修改后的原始SVG,找到svg元素是网络中每个顶点的最快方法是什么?
所以我有圆圈(顶点)和背景形状。我需要得到一个圆(顶点)后面的背景元素。我也有每个顶点的所有(x,y)位置。
我使用jquery看到了这个解决方案:
$("svg").find("[x='10'][y='10']");
返回此位置上的所有元素。但它看起来计算成本很高,因为我需要在力布局(d3.js)的每次交互中计算超过1000个顶点。 力总是处于活动状态,用户需要使用鼠标与顶点进行交互。
这是一个例子:
我想知道每个节点在哪个方格,我只知道节点位置。
答案 0 :(得分:1)
使你想要的元素忽略(即网络)指针 - 事件="无"
答案 1 :(得分:1)
您可能需要的是最近邻算法。 Mike Bostock有一个很好的例子here.
最近邻居在O(log(n))中运行,并允许任何导致点位置出现问题的舍入错误。
如果您的节点没有移动,您还可以考虑将后SVG元素添加到网络中节点的数据(假设您已使用d3定义了网络),之后您可以直接引用来自数据的SVG元素,而不是寻找它。如果你没有使用d3构建网络,jquery也有一个.data
方法。