d3.js 我们可以通过js中元素的尺寸(宽度和高度)来获得缩放比例吗

cqoc49vn  于 2022-11-12  发布在  其他
关注(0)|答案(1)|浏览(137)

我目前面临的问题与缩放水平在d3.js
我用这个函数得到了<g className ="_zoomElement">元素的尺寸

const g = select("._zoomElement")
      console.log(g.node().getBBox())

我想根据SVG的尺寸将组元素放入SVG画布中,只需单击一个按钮,我就得到了SVG画布的宽度和高度尺寸

说明图像

我不知道如何借助尺寸标注找到刻度值
我这样想
如果父元素维度类似于width = 1000px height = 500px
我将从这些值中减去2%,我们得到拟合比
但我关心是,我们如何才能得到缩放比例值,

mefy6pfw

mefy6pfw1#

最后,我找到了答案自己通过搜索d3.js缩放到适合的例子,然后我找到了这个职位的解决方案click to view

function zoomFit(paddingPercent, transitionDuration) {
 var bounds = view.node().getBBox();
var parent = view.node().parentElement;
var fullWidth = parent.clientWidth,
  fullHeight = parent.clientHeight;
var width = bounds.width,
  height = bounds.height;
var midX = bounds.x + width / 2,
  midY = bounds.y + height / 2;
if (width == 0 || height == 0) return; // nothing to fit
var scale =
  (0.79 || 0.75) / Math.max(width / fullWidth, height / fullHeight);
var translate = [
  fullWidth / 2 - scale * midX,
  fullHeight / 2 - scale * midY,
];
svg
  .transition()
  .duration(200 || 0)
  .call(
    zoom.transform,
    d3.zoomIdentity.translate(...translate).scale(scale)
  );

}
这段代码的结尾我得到了translate的值和scale这是一个完美的代码缩放到适合只是附加该函数到主组

const root = select("._zoomElement") // main group seletion
  console.log(root.node().getBBox())

我觉得一切都很好

相关问题