Sun*_*ena 4 html javascript fabricjs
我正在使用一个函数来缩放整个 fabric.js 画布,这个函数采用像 zoomCanvas(2.2) 这样的百分比值;其中 2.2 表示 220% 但不是百分比,我需要按像素缩放画布以适合容器中的画布,例如当画布从 json 数据加载到页面上时,其初始大小为 1200px x 700px,我的容器大小为 500px。现在我需要找到一种方法可以将这个 500px 转换为百分比值,以便整个画布及其所有对象都适合 500px。
这是比例函数,其中因子是百分比值
function zoomCanvas(factor) {
canvas.setHeight(canvas.getHeight() * factor);
canvas.setWidth(canvas.getWidth() * factor);
if (canvas.backgroundImage) {
// Need to scale background images as well
var bi = canvas.backgroundImage;
bi.width = bi.width * factor; bi.height = bi.height * factor;
}
var objects = canvas.getObjects();
var tcounter = 0;
for (var i in objects) {
tcounter++;
//alert(tcounter);
var scaleX = objects[i].scaleX;
var scaleY = objects[i].scaleY;
var left = objects[i].left;
var top = objects[i].top;
var tempScaleX = scaleX * factor;
var tempScaleY = scaleY * factor;
var tempLeft = left * factor;
var tempTop = top * factor;
objects[i].scaleX = tempScaleX;
objects[i].scaleY = tempScaleY;
objects[i].left = tempLeft;
objects[i].top = tempTop;
objects[i].setCoords();
}
canvas.renderAll();
canvas.calcOffset();
}
Run Code Online (Sandbox Code Playgroud)
And*_*zzi 10
您需要的比例因子是:
scaleRatio = Math.min(containerWidth/canvasWidth, containerHeight/canvasHeight);
Run Code Online (Sandbox Code Playgroud)
要缩放你的画布,你真的应该使用:
canvas.setDimensions({ width: canvas.getWidth() * scaleRatio, height: canvas.getHeight() * scaleRatio });
Run Code Online (Sandbox Code Playgroud)
然后
canvas.setZoom(scaleRatio)
Run Code Online (Sandbox Code Playgroud)
不需要自定义缩放功能
您应该有一个具有某些尺寸的原始画布。从该画布中,您应该找到您的factorX 和factorY 值。例如,您的原始画布为 1280x1020 像素,您需要转换为尺寸 500x500 像素。
var factorX = 500 / 1280;
var factorY = 500 / 1020;
Run Code Online (Sandbox Code Playgroud)
然后,修改你的函数
function zoomCanvas(factor) {...}
Run Code Online (Sandbox Code Playgroud)
到
function zoomCanvas(factorX, factorY) {...}
Run Code Online (Sandbox Code Playgroud)
使用factorX 作为宽度值,使用factorY 作为高度值。
| 归档时间: |
|
| 查看次数: |
7492 次 |
| 最近记录: |