Sam*_*Sam 0 html javascript jquery canvas fabricjs
我正在使用 FabricJS 创建全屏画布并在服务器端保存更改。在加载之前,我调整了画布和背景的大小,以便在每个页面加载时画布都适合用户窗口。
canvas.setHeight($(window).height());
canvas.setWidth($(window).width());
canvas.backgroundImage.width = $(window).width();
canvas.backgroundImage.height = $(window).height();
Run Code Online (Sandbox Code Playgroud)
问题是画布和背景得到了调整,而不是对象。它们相对于屏幕保持相同的位置并且不会改变尺寸,因此在其他屏幕尺寸上是不正确的。如何解决这个问题?
由于 AndreaBogazzi 的提示,经过多次尝试,我找到了解决方案。更改背景/画布大小/位置时,对象不会保持相对于背景/画布的大小/位置。
这就是为什么最好使用缩放功能的原因,这样所有画布元素都会以相同的方式相对于彼此进行调整:
// background: background image
// zoom: zoom amount usable with canvas.setZoom(zoom).
if (background.width < $(window).width()) {
zoom = $(window).height() / background.height;
if ((zoom * background.width) > $(window).width()) {
zoom = $(window).width() / background.width;
}
} else {
zoom = $(window).width() / background.width;
if ((zoom * background.height) > $(window).height()) {
zoom = $(window).height() / background.height;
}
}
canvas.setZoom(zoom );
Run Code Online (Sandbox Code Playgroud)
这将导致画布始终是它的最大尺寸而不会破坏比率,不会离开屏幕并且所有元素都保持正确的位置和高度。