javascript – 将Fabric JS中的画布平移限制为边界?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 将Fabric JS中的画布平移限制为边界?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3490字,纯文字阅读大概需要5分钟。
内容图文
![javascript – 将Fabric JS中的画布平移限制为边界?](/upload/InfoBanner/zyjiaocheng/767/6e54e27489f54be8a15acfd053a67c77.jpg)
我使用Fabric JS画布实现了画布平移,使用下面的代码:
canvas.on("mouse:down", function(e) {
panning = true;
});
canvas.on("mouse:up", function(e) {
panning = false;
});
canvas.on("mouse:move", function(e) {
if (panning) {
var delta = new fabric.Point(e.e.movementX, e.e.movementY);
canvas.relativePan(delta);
}
});
这样可以正常工作,但您可以向任何方向无限滚动/平移.我想将其限制为边界,以便较小的画布实际上是较大绘图区域的视图.例如400 x 400像素的画布,它不允许你平移超过1000 X 1000像素区域.我在Fabric JS画布对象中看到有一个viewportTransform []数组,它在字段[0]中保存缩放级别,在字段[4]和[5]中保存X和Y偏移,但不确定如何最好地实现平移边界.是否有Fabric功能可以使这项工作?
我还必须考虑缩放级别(我正在使用canvas.setZoom())并且不希望用户拖动对象超出平移边界(这可能是一个单独的问题!).
有什么想法吗?
谢谢!
解决方法:
在FabricJS网页上已有关于它的教程,它适用于鼠标滚轮,但你可以调整它:http://fabricjs.com/fabric-intro-part-5
我用一些按钮做了.
首先,我要告诉你缩放和平移会影响canvas viewportTransform属性,这是一个矩阵,类似于css转换属性的工作(或者我相信如此……).
这些是我在工作时在控制台中获得的一些输出:
originalViewporTransform(6)[1,0,0,1,0,0]
放大
影响指数0& 3
zoomViewporTransform(6)[1.2,0,0,1.2,0,0]
zoomViewporTransform(6)[1.44,0,0,1.44,0,0]
摇摄
对:
影响指数4
panningViewporTransform(6)[1.44,0,0,1.44,-82,0]
panningViewporTransform(6)[1.44,0,0,1.44,-83,0]
剩下:
影响指数4
panningViewporTransform(6)[1.728,0,0,1.728,259,0]
panningViewporTransform(6)[1.728,0,0,1.728,260,0]
底部:
影响指数5
panningViewporTransform(6)[1.728,0,0,1.728,0,-241]
panningViewporTransform(6)[1.728,0,0,1.728,0,-242]
最佳:
影响指数5
panningViewporTransform(6)[1.728,0,0,1.728,0,305]
panningViewporTransform(6)[1.728,0,0,1.728,0,306]
这是我在四个方向上用按钮控制平移的功能.要限制顶部和左侧平移,只需将相应的视口设置为0即可.当关于右侧和底部平移时,您必须设置您正在考虑的边界的数量大小.我正在考虑我的画布大小,但你可以使用你想要的大小.
...
else if (this.actualCanvasViewportTransform[4] < this.canvas.getWidth() - (this.canvas.getWidth() * this.actualCanvasZoom))
...
在那些行你必须改变(this.canvas.getWidth()* this.actualCanvasZoom)你想要的大小,如此
(pxLimitRight * this.actualCanvasZoom)
希望能帮助到你
whileMouseDown(caseType){
if (this.actualCanvasZoom <= this.originalCanvasZoom) return;
const units = 1;
let delta;
switch (caseType) {
case 'right':
delta = new fabric.Point(-units,0);
break;
case 'left':
delta = new fabric.Point(units,0);
break;
case 'bottom':
delta = new fabric.Point(0,-units);
break;
case 'top':
delta = new fabric.Point(0,units);
break;
}
this.canvas.relativePan(delta);
// console.log('panningViewporTransform', this.canvas.viewportTransform, this.actualCanvasZoom);
this.actualCanvasViewportTransform = this.canvas.viewportTransform;
/*
WE ARE PANNING LEFT AND RIGHT
*/
if (this.actualCanvasViewportTransform[4] >= 0) {
// WE ARE GOING LEFT
this.actualCanvasViewportTransform[4] = 0;
} else if (this.actualCanvasViewportTransform[4] < this.canvas.getWidth() - (this.canvas.getWidth() * this.actualCanvasZoom))
{
// WE ARE GOING RIGHT
this.actualCanvasViewportTransform[4] = this.canvas.getWidth() - (this.canvas.getWidth() * this.actualCanvasZoom);
}
/*
WE ARE PANNING DOWN AND UP
*/
if (this.actualCanvasViewportTransform[5] >= 0) {
// WE ARE GOING UP
this.actualCanvasViewportTransform[5] = 0;
} else if (this.actualCanvasViewportTransform[5] < this.canvas.getHeight() - (this.canvas.getHeight() * this.actualCanvasZoom)) {
// WE ARE GOING DOWN
this.actualCanvasViewportTransform[5] = this.canvas.getHeight() - (this.canvas.getHeight() * this.actualCanvasZoom);
}
}
内容总结
以上是互联网集市为您收集整理的javascript – 将Fabric JS中的画布平移限制为边界?全部内容,希望文章能够帮你解决javascript – 将Fabric JS中的画布平移限制为边界?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。