如何放大和中心的对象与fabricjs
How to zoom in and center on an object with fabricjs?
我希望能够点击一个对象,并将其缩放到画布视口中的边界框。我该怎么做呢?请参阅http://jsfiddle.net/tinodb/qv989nzs/8/了解我想从事的工作。
Fabricjs的画布有zoomToPoint
方法(关于文档说:Sets zoom level of this canvas instance, zoom centered around point
),但这并不集中到给定的点,但它确实可以用滚动缩放。见http://jsfiddle.net/qv989nzs/
我尝试了其他几种方法,比如使用canvas.setViewportTransform
:
// centers a circle positioned at (200, 150)??
canvas.setViewportTransform([2, 0, 0, 2, -250, -150])
但我无法找到setViewportTransform
的后两个参数与对象位置的关系。
我找到了一种方法来做到这一点,它由:
canvas.setZoom(1) // reset zoom so pan actions work as expected
vpw = canvas.width / zoom
vph = canvas.height / zoom
x = (object.left - vpw / 2) // x is the location where the top left of the viewport should be
y = (object.top - vph / 2) // y idem
canvas.absolutePan({x:x, y:y})
canvas.setZoom(zoom)
参见http://jsfiddle.net/tinodb/4Le8n5xd/的工作示例。
我无法让它与zoomToPoint
和setViewportTransform
一起工作(后者做奇怪的事情,例如http://jsfiddle.net/qv989nzs/9/并单击蓝色圆圈;它应该把左上角的视窗放在(25,25),但它没有)
下面是如何使用setViewportTransform
的示例:
// first set the zoom, x, and y coordinates
var zoomLevel = 2;
var objectLeft = 250;
var objectTop = 150;
// then calculate the offset based on canvas size
var newLeft = (-objectLeft * zoomLevel) + canvas.width / 2;
var newTop = (-objectTop * zoomLevel) + canvas.height / 2;
// update the canvas viewport
canvas.setViewportTransform([zoomLevel, 0, 0, zoomLevel, newLeft, newTop]);
相关文章:
- FabricJs-限制主对象内添加对象的移动区域
- FabricJS-组选择使对象在选择时处于最前面
- 在鼠标悬停时显示对象的边框(Fabricjs)
- FabricJS CurvedText对象(扩展)在更新间距和文本属性时未显示
- 无法选择使用fabricjs添加的对象
- 对象以编程方式移动后的 Fabricjs 在其新位置上不可选择
- Fabricjs-Can'不要在fabric.util.enlivenObjects之后选择对象
- 如何在 FabricJS 上缩放对象时停止控件边框填充增加
- fabricjs 中对象的上下文菜单
- 在 Fabricjs 中缩放对象时缺少模式质量
- FabricJS:对象:移动事件不会在用户选择多个对象时触发
- FabricJS 对象不相对于画布调整大小
- 将事件绑定到fabricJS中的对象
- 当缩放svg对象时,使用FabricJS将无法选择它
- fabricjs:长按时抖动画布上的对象
- 如何使用Fabricjs将画布对象重绘为更大的画布
- FabricJS:始终在画布上居中对象
- 在FabricJS中绘图后无法选择对象
- 在FabricJs中使用localStorage对象重新绘制画布
- 无法向对象添加事件侦听器.fabricjs