如何只允许在原始 SVG 的范围内平移

Dom*_*man 5 svgpanzoom

问题

我想限制 SVG 的平移,这样当没有应用缩放时,就不可能进行平移,但是当您放大时,您可以在 SVG 的边界内平移。

视觉示例:在下图中,中心的缩放视口能够平移到 SVG 的边缘,但不能进一步平移。

在此输入图像描述

然而,这与给出的平底锅示例非常不同,我无法研究如何改变它以使其行为如此。你会怎么做?(我是否还缺少一种简单的内置方法来执行此操作)?

我在尝试解决此问题时遇到的问题

  1. 每个限制都设置了正确方向上允许的像素移动。即,bottomLimit = 200 允许您向上移动 200 px。因此,在默认缩放下,我需要将所有限制设置为 0,但是我无法弄清楚如何识别默认缩放,因为 realZoom 根据浏览器窗口大小而变化。
  2. 在视觉示例中,如果我们想设置 BottomLimit 来正确绑定 SVG,它需要等于 x,但我不知道如何计算 x。(topLimit 需要等于 y 等)

bum*_*mbu 4

基于https://jsfiddle.net/930j458h/3/示例:

  1. 检查值panZoom.getSizes()
  2. 算出getSizes().width是整个 SVG 块的宽度,getSizes().viewBox.width是 viewBox 的大小。我们对 viewBox 感兴趣。
  3. 替换getSizes().widthgetSizes().viewBox.width,一切都神奇地起作用

https://jsfiddle.net/930j458h/4/

  • 如果您有一个填充视口的图像并且不允许缩小,并且您希望仅在放大并在图像边界内时启用平移,那么它是 `, gutterWidth = (zoomPan.getSizes().width) , gutterHeight = (zoomPan.getSizes().height)` (3认同)