Javascript 将Konva层节点拟合到;“视口”;

Javascript 将Konva层节点拟合到;“视口”;,javascript,canvas,konvajs,Javascript,Canvas,Konvajs,我目前正在尝试创建一个算法,该算法将使视口以舞台上的内容为中心 获取地图上每个形状的原点/最中心点是直截了当的,我可以做到这一点。我很难找到一个合适的计算方法来缩放舞台,这样舞台上的每个形状都是可见的(加上一些额外的填充物) 我真的很难在脑海中想象出一个数学上的答案。我提出的唯一解决方案是从视图和舞台上的对象创建矩形,并强制回答,以便视图的边缘不与舞台上的任何形状相交 非常感谢您提供任何指导您可以尝试使用以下内容: // do we need padding? const padding

我目前正在尝试创建一个算法,该算法将使视口以舞台上的内容为中心

获取地图上每个形状的原点/最中心点是直截了当的,我可以做到这一点。我很难找到一个合适的计算方法来缩放舞台,这样舞台上的每个形状都是可见的(加上一些额外的填充物)

我真的很难在脑海中想象出一个数学上的答案。我提出的唯一解决方案是从视图和舞台上的对象创建矩形,并强制回答,以便视图的边缘不与舞台上的任何形状相交


非常感谢您提供任何指导

您可以尝试使用以下内容:

// do we need padding?
const padding = 10;

// get bounding rectangle
const box = layer.getClientRect({ relativeTo: stage });
const scale = Math.min(
  stage.width() / (box.width + padding * 2),
  stage.height() / (box.height + padding * 2)
);


stage.setAttrs({
  x: -box.x * scale + padding * scale,
  y: -box.y * scale  + padding * scale,
  scaleX: scale,
  scaleY: scale
});

非常优雅的解决方案,非常感谢!我必须查看layer.getClientRect({relativeTo:stage})的源代码;因为那是我丢失的钥匙。对我来说,下一步是当视口更大时,使元素在画布中居中。真的再次感谢你!嘿@lavtron谢谢你的解决方案!虽然这将使画布内的地图始终左对齐,但有没有办法使其始终水平和垂直居中?谢谢你advanced@stillfire这应该很简单。只要稍微修改一下计算。