gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 18:06:59 34 4
gpt4 key购买 nike

我正在尝试获取对象移动时的 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/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com