You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Fabric.js中如何在对象移动结束后仅触发一次指定函数

解决Fabric.js对象移动结束后仅触发一次函数的问题

嘿,我完全懂你的困扰!object:moving事件确实会在拖拽对象的整个过程中持续触发,导致你的recCanvas()被反复调用。要实现仅在移动结束时触发一次的效果,Fabric.js其实提供了专门的事件来处理这种场景——object:modified。

核心解决方案代码

直接把监听的事件从object:moving换成object:modified就可以了:

canvas.on('object:modified', function (event) {
  recCanvas(canvas); // 现在只会在移动结束后触发一次
});

为什么这个方法有效?

  • object:moving:在对象被拖拽的实时过程中持续触发,每帧都会调用回调函数,所以会多次执行你的逻辑。
  • object:modified:当对象的变换操作(包括移动、缩放、旋转等)完全结束(也就是用户松开鼠标,对象位置/状态确定后)才会触发一次,完美匹配你的需求。

进阶:仅过滤移动操作(可选)

如果你的场景里需要区分“移动结束”和其他变换(比如缩放、旋转)结束,可以在回调里做个简单判断,确保只有移动操作才触发recCanvas():

canvas.on('object:modified', function (event) {
  const obj = event.target;
  // 对比对象移动前后的坐标,判断是否是移动操作
  if (obj.left !== obj._originalLeft || obj.top !== obj._originalTop) {
    recCanvas(canvas);
  }
});

这样就能精准控制只在对象移动结束时执行你的函数啦!

内容的提问来源于stack exchange,提问作者Jaan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:34:07