fabricjs - 在视口中缩放 canvas(可能吗?)

fabricjs - Zoom canvas in viewport (possible?)

目前,我尝试在 fabricjs-framework.

的基础上为可视化编辑器实现 缩放功能

我环顾四周,但越来越困惑,因为我认识到这个 feature/function 的开发对于社区和开发人员来说是一条漫长而崎岖的道路。

因此,许多解决方案似乎已经过时。

但此刻我发现fabric-viewport developed by the RTSGroup on Github

实施很简单,但它只能 zoom/control canvas(内部)中的对象。 canvas 也不行。但我也想缩放 canvas。 (视口内部)

为了更好地理解我在寻找什么,我做了一个简单的解释-图片:

有没有办法使用 fabricjs-viewport 插件或其他不过时的解决方案来做到这一点?

我已经看到一些页面也使用这种视口,例如支持滚动的缩放功能。但是我不确定它们是否属于 fabricjs-framework.

已经非常感谢您提供的每一个提示和提示,它们可以引导我走向正确的方向。

您好, 萨沙

您可以使用 feabricjs 在 canvas 上的对象以及 canvas 本身 上创建放大和缩小功能]

为了 zoomIn 和 zoomOut canvas 本身,你应该 改变它的 heightwidth 参数,进入 zoomIn/zoomOut 函数,所以当它去改变对象时,它也会 改变 canvas 尺寸:

放大:

   canvas.setHeight(canvas.getHeight() * SCALE_FACTOR);
   canvas.setWidth(canvas.getWidth() * SCALE_FACTOR);

用于缩小:

canvas.setHeight(canvas.getHeight() * (1 / SCALE_FACTOR));
canvas.setWidth(canvas.getWidth() * (1 / SCALE_FACTOR));

请查看我制作的实时 fiddle 示例,它放大和缩小对象以及 canvas,.

现场 fiddle 示例:http://jsfiddle.net/tornado1979/39up3jcm/

希望有所帮助, 祝你好运

@Theo 解决方案很棒,但有一件事: 您可以只调用一次 canvas.setZoom(ZOOM_INDEX),而不是使用 object.scaleXobject.scaleY 来缩放 canvas 中的每个对象。 (仅来自 fabricjs 1.4.13 版本)

我举的一个例子是Here