Javascript D3.js v6中树节点的中心
我正在尝试在单击某个节点后将其居中,就像在中所做的一样。然而,在示例中,它是在D3V4中完成的,我希望在最新版本(v6)中完成。主要的问题是我不理解Javascript D3.js v6中树节点的中心,javascript,d3.js,tree,Javascript,D3.js,Tree,我正在尝试在单击某个节点后将其居中,就像在中所做的一样。然而,在示例中,它是在D3V4中完成的,我希望在最新版本(v6)中完成。主要的问题是我不理解centerNode()函数是如何工作的(即它是如何获得x和y的坐标以及它对它们做了什么),所以我自己无法更改它。有人能帮我理解它在做什么,并给出一些需要做哪些改变的提示吗 另外,如果有人认为共享我代码的某些部分更好,请告诉我。SVG使用3个参数(zoomX、zoomY、zoomK)缩放和移动其内容,其中zoomX和zoomY是垂直/水平移动,zoo
centerNode()
函数是如何工作的(即它是如何获得x和y的坐标以及它对它们做了什么),所以我自己无法更改它。有人能帮我理解它在做什么,并给出一些需要做哪些改变的提示吗
另外,如果有人认为共享我代码的某些部分更好,请告诉我。SVG使用3个参数(zoomX、zoomY、zoomK)缩放和移动其内容,其中zoomX和zoomY是垂直/水平移动,zoomK是缩放因子。因此,具有坐标nodeX、nodeY的每个节点将使用以下变换进行定位:
actualX = nodeX * zoomK + zoomX;
actualY = nodeY * zoomK + zoomY;
zoomK = t.k
zoomX = -nodeX * zoomK + centerX;
zoomY = -nodeY * zoomK + centerY;
identity = d3.zoomIdentity.translate(zoomX,zoomY).scale(zoomK)
svg
.transition()
.duration(time)
.call(zoomListener.transform, identity);
要将选定节点精确移动到SCG元素的中心,其实际坐标应为:
centerX = viewerWidth / 2;
centerY = viewerHeight / 2;
因此,我们通过以下方式计算zoomX/zoomY:
zoomX = -nodeX * zoomK + centerX;
zoomY = -nodeY * zoomK + centerY;
现在,SVG可以使用缩放变换移动其内容:
actualX = nodeX * zoomK + zoomX;
actualY = nodeY * zoomK + zoomY;
zoomK = t.k
zoomX = -nodeX * zoomK + centerX;
zoomY = -nodeY * zoomK + centerY;
identity = d3.zoomIdentity.translate(zoomX,zoomY).scale(zoomK)
svg
.transition()
.duration(time)
.call(zoomListener.transform, identity);