Fabric.js:窗口大小调整问题

问题描述 投票:0回答:2

我正在尝试制作一个简单的类似 PowerPoint 的应用程序。这两周我一直在努力解决窗口大小调整问题。如果您给我任何建议,我真的很感激!

我想继续在屏幕中间定位一个白色矩形,所以我使用absolutePan和zoomToPoint。加载后效果完美。但是,当您调整窗口大小时,位置会发生漂移。

这是我的代码

.
.
  handleWindowResize()
  window.addEventListener('resize', handleWindowResize)
.
.
  function handleWindowResize(){
    var clientWidth = document.getElementById('drawing-area').clientWidth
    var clientHeight = document.getElementById('drawing-area').clientHeight
    canvas.setDimensions({ width: clientWidth, height: clientHeight })

    // Pan canvas to locate white board center
    let panX =  - (canvas.width - WB_WIDTH)/2
    let panY =  - (canvas.height - WB_HEIGHT)/2

    var zoom = Math.min(canvas.height/WB_HEIGHT, canvas.width/WB_WIDTH) * 0.9
    canvas.absolutePan(new fabric.Point(panX,panY))
    canvas.zoomToPoint(new fabric.Point(canvas.width/2, canvas.height/2), zoom)
    canvas.renderAll();
  }

我认为平移可行,但 ZoomToPoint 函数无法正常工作。变焦中心点好像不正确

我尝试了relativePan、setViewportTransform和其他一些函数,但没有成功。

请帮忙!

screen shot

Codepen:我的代码

html5-canvas fabricjs
2个回答
1
投票

终于我解决了这个问题。 平移之前必须设置 Zoom = 1

    var zoom = Math.min(canvas.height/WB_HEIGHT, canvas.width/WB_WIDTH) * 0.9
    canvas.setZoom(1) // Must set zoom = 1 before panning
    canvas.absolutePan(new fabric.Point(panX,panY))
    canvas.zoomToPoint(new fabric.Point(canvas.width/2, canvas.height/2), zoom)
    canvas.renderAll();

0
投票

非常感谢您的问题和 CodePen 演示!我一直在处理同样的问题,即即使调整窗口大小,也要将对象保持在屏幕中央。

我什至不记得本周我有多少次访问此页面并尝试了您答案中的代码。不幸的是,它似乎对我不起作用。

也就是说,直到我点击您的 CodePen 链接。我开始将你的代码与我的进行比较,试图找出差异。最终,我找到了罪魁祸首:我最初使用

canvas.centerObject(object)
将对象居中,而你设置
top: 0, left: 0
却没有将其居中!

感谢您无意中帮助我解决了我的问题!

© www.soinside.com 2019 - 2024. All rights reserved.