【发布时间】:2016-12-23 08:39:02
【问题描述】:
我正在使用 D3 树布局的这个实现:
http://bl.ocks.org/robschmuecker/7880033
我已经让我的树响应外部事件,为此,我想知道某个节点当前是否不可见(在 svg 容器之外),以便例如重新定位它。
经过一些研究,我发现这个 SO 答案看起来正是我所需要的:
Getting Screen Positions of D3 Nodes After Transform
当拖动左上角的节点并单击它时,我希望坐标为 [0,0]。 但由于某种原因,x 坐标总是错误的,偏移量很大。 在这里摆弄了一下:
https://jsfiddle.net/syberyan/yd8L4v0q/
我修改了 click() 函数,以便它打印目标节点的坐标。
function getElementCoords(element, coords) {
var ctm = element.getCTM(),
x = ctm.e + coords.x*ctm.a + coords.y*ctm.c,
y = ctm.f + coords.x*ctm.b + coords.y*ctm.d;
return {x: x, y: y};
};
function click(d) {
if (d3.event.defaultPrevented) return; // click suppressed
d3.selectAll('.node').each(function (node, i) {
if (d === node) {
let coords = getElementCoords(this, node);
console.log(coords.x, coords.y); // shows coords relative to my svg container
}
});
}
我是 D3 新手,所以我可能做错了什么,但是什么?或者也许有更好的方法?
【问题讨论】: