javascript - 移动时更新fabricjs对象坐标

标签 javascript canvas fabricjs

我正在尝试获取对象移动时的 x 和 y 坐标。我在 object:moving 上使用 getLeft()getTop() 方法。但如果对象旋转,这些方法就没有帮助。

然后我尝试使用 object.getBoundRect().top 获取对象边界框的顶部和左侧。但这不会动态更新。它给出移动操作开始时的边界框值。有没有办法在移动时获取边界框值?

canvas.on('object:moving', function(e) {
  var scaledObject = e.target;
  $('#mouse-info').text("X:"+parseInt(scaledObject.getBoundingRect().left)+", Y:"+parseInt(scaledObject.getBoundingRect().top));
});

最佳答案

从 Fabric.js 版本 2.4.4 开始,getLeft()getTop() 方法已从 Fabric Object 类中删除。 top 和 left 属性在 object:moving 事件上更新,因此您可以直接访问它们;但是,这些属性反射(reflect)了 Fabric 对象的 aCoords 或绝对坐标,而不考虑 Canvas 的缩放值如何更改该对象的坐标。

oCoords 考虑了 Fabric 对象的位置,包括该对象的 viewportTransformpadding 属性。

尽管 Fabric.js documentation目前声称,“您可以计算 [oCoords],而无需使用 @method calcCoords 进行更新”,oCoords 实际上似乎并未由 对象更新:移动事件。

因此,您需要对事件返回的对象调用 calcCoords 方法,以获取考虑 Canvas 缩放值和对象填充的坐标。

这是一个可行的解决方案:

fabricCanvas.on("object:moving", function(e) {
    var actObj = e.target;
    var coords = actObj.calcCoords(); 
    // calcCoords returns an object of corner points like this 
    //{bl:{x:val, y:val},tl:{x:val, y:val},br:{x:val, y:val},tr:{x:val, y:val}}
    var left = coords.tl.x;
    var top = coords.tl.y;
    return {left:left,top:top};
})

希望这有帮助!

关于javascript - 移动时更新fabricjs对象坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42373738/

相关文章:

javascript - Mapbox - 在页面上滚动时防止 map 缩放

javascript - JQuery UI 对话框 - 需要添加一个最小化按钮

css - 进度圆圈 - 在圆圈的末端画一个小圆弧 + 更多

javascript - 禁用对象的事件监听

fabricjs - 未选择时在 Fabric 文本框上绘制边框

javascript - 在将 Canvas 保存为图像之前如何知道渲染是否完成?

javascript - 为什么我的 JSON.parse 不起作用?

javascript - 在 Angular 的 html 上有条件打印

javascript - JavaScript 中的巨大内存泄漏

java - 如何使用canvas设置画线延迟