Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript D3.js v6中树节点的中心_Javascript_D3.js_Tree - Fatal编程技术网

Javascript D3.js 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

我正在尝试在单击某个节点后将其居中,就像在中所做的一样。然而,在示例中,它是在D3V4中完成的,我希望在最新版本(v6)中完成。主要的问题是我不理解
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);