如何创建画布边界限制缩放时的尺度?(fabric.js)
how to create canvas boundary limit which scales when zoomed? (fabric.js)
我已经读了一些关于这个主题的帖子,但我还没有破解我的特殊问题的解决方案。
http://plnkr.co/edit/ScJGKwR74H8UjsaJqfZF?p =
预览这里的目的是您能够放大图像,但图像在画布内始终保持可见,在拖动时没有空白。问题实际上发生在这部分代码中;
obj = e.target;
obj.setCoords();
var boundingRect = obj.getBoundingRect();
var zoom = canvas.getZoom();
var viewportMatrix = canvas.viewportTransform;
boundingRect.top = (boundingRect.top - viewportMatrix[5]) / zoom;
boundingRect.left = (boundingRect.left - viewportMatrix[4]) / zoom;
boundingRect.width /= zoom;
boundingRect.height /= zoom;
var pHeight = obj.canvas.height * zoom,
pWidth = obj.canvas.width * zoom,
nHeight = obj.canvas.height - pHeight,
nWidth = obj.canvas.width - pWidth;
// top-left corner
if (boundingRect.top < nHeight || boundingRect.left < nWidth) {
obj.top = Math.max(obj.top, nHeight + obj.top - boundingRect.top);
obj.left = Math.max(obj.left, nWidth + obj.left - boundingRect.left);
}
当我点击缩放按钮时,我希望有一个负数输出,因为我希望图像被拖出屏幕,但从不留下任何空白。我有它的一半工作,但我不知道如何得到它,所以边界限制将始终计算到图像的缩放版本?
希望有人能指出我错在哪里?
谢谢
我试着稍微重构左上角的逻辑,以便它使用右下角来防止它在任何方向上离开画布。它看起来像:
var canvasHeight = obj.canvas.height / zoom,
canvasWidth = obj.canvas.width / zoom,
rTop = boundingRect.top + boundingRect.height,
rLeft = boundingRect.left + boundingRect.width;
// Where top left corner check used to be
if (rTop < canvasHeight || rLeft < canvasWidth) {
obj.top = Math.max(obj.top, canvasHeight - boundingRect.height);
obj.left = Math.max(obj.left, canvasWidth - boundingRect.width);
}
基本上,它不是检查图像的顶部是否超过了画布的大小差异,而是检查图像的底部是否脱离了放大画布的底部。
http://plnkr.co/edit/cjAWEqrdnL6skKQYsFM2?p =预览
相关文章:
- 使用fabric.js从矩形区域获取对象,并将该区域绘制到画布上
- Fabric.js-更改矩形填充
- Dropdown在fabric js的Materialize设计中不起作用
- 如何在fabric js中向多边形添加图像
- fabric js多边形集合坐标
- 在fabric.js中以PNG格式下载Canvas,给出网络错误
- 在fabric.js中使用一个组作为遮罩
- 以编程方式将fabric-js-canvas的图像替换为hq图像,并重新计算其他对象的坐标和大小
- 如何通过Fabric.js只点击实际内容来选择对象
- Cufon-builder-font-js文件在Fabric.js中不起作用
- fabric.js中的文本对齐方式未按预期工作
- fabric.js:使用 Image.set() 调整图像大小是否会降低图像质量
- 使用Fabric.js选择画布上的所有对象
- Canvas仅使用fabric.js在点击事件时渲染自定义Web字体
- drawImage() in fabric js
- Fabric.js函数将对象从A点移动到B点
- Fabric.js文本转换不起作用
- 检查Fabric.js中的Canvas是否为空
- 如何在Fabric.js上获取鼠标坐标
- 如何使用Fabric.js创建多个形状