reactjs - FabricJS 对象在左上角不可选择/可点击/调整大小(React + FabricJs)
问题描述
我有FabricJs
帆布。我在画布外有多个对象。当我单击对象时,它会出现在 Canvas 中。我没有以编程方式对这个对象做任何其他事情。
这是将图像添加到 Canvas 的部分代码(它是 React 代码):
const { state, setState } = React.useContext(Context);
const { canvas } = state;
...
const handleElementAdd = (event, image) => {
const imageSize = event.target.childNodes[0].getBoundingClientRect();
const imageUrl = `/storage/${image.src}`;
new fabric.Image.fromURL(imageUrl, img => {
var scale = 1;
if (img.width > 100) {
scale = 100/img.width;
}
var oImg = img.set({
left: state.width / 2 - img.width * scale,
top: state.height / 2 - img.height * scale,
angle: 0})
.scale(scale);
canvas.add(oImg).renderAll.bind(canvas);
canvas.setActiveObject(oImg);
});
};
...
<div
key={img.name}
onClick={(e) => handleElementAdd(e, img)}
className={buttonClass}
>
看来,我可以拖放、调整大小、选择它。但是,当我的对象放在画布的左上角时,它是不可点击的,不可调整大小等。我可以选择更大的区域然后选择对象,但它不会响应任何事件,如调整大小、选择等。
不知道在哪里看。我读到如果以编程方式将坐标更改object.setCoord()
为对象会有所帮助,但在这种情况下,我不明白该放在哪里。
解决方案
每次修改对象或移动对象时,都必须放置(调用)object.setCoords()。因此,您可以在画布的 mouseUp 事件上调用它。
您可以编写一个名为“moveObject”的函数,在该函数中获取您尝试移动/移动/更新的对象。然后只是 selectedObject.setCoords()。
然后在 canvas.on('selection:updated', e => {----}) 中调用该函数
推荐阅读
- bash - 用于将多个文本文件合并到一个文件中的 Shell 脚本失败
- postgresql - 在 PostgreSQL 中搜索相似词的好方法
- tensorflow - Tensorflow 对象检测没有给出名为“部署”的模块
- wordpress - 此 nginx 配置中的最佳选择
- php - 处理交易功能贝宝
- sql - 将字符串作为参数插入 NET CORE 中的 where IN 子句
- c# - 操作 MethodInfo 的 DeclaringType - 有可能吗?
- scala - Sbt dist 导致无法访问非托管资源?
- properties - 可能知道谁在调用我的 QML 属性?
- php - $_SESSION PHP 在不同 URL 的同一服务器上无法识别