Fabric.js中是否有Canvas Modified事件?

9
在Fabric.js中,我们有物体修改事件,例如object:modified。那么是否有类似于整个画布的事件呢?
实际上,我正在尝试实现撤销和重做功能。如果画布发生了变化,我会将其保存为JSON格式,并在需要时重新加载以进行撤销操作。
在Fabric.js中,是否有更好的解决方案来实现这些功能呢?

你认为这个事件与“object:modified”有何不同?“object:modified”覆盖了画布上所有修改的情况,因为任何修改都意味着对象的改变(除了像画布背景颜色这样的东西,但通常不应该成为撤消/重做的一部分)。 - kangax
当我们向画布添加任何新对象时,object:modified事件不会触发。它只有在我们对任何已添加的对象进行修改(缩放、旋转等)时才会触发。 - user2571818
3
你可以使用 "object:added" 和/或 "object:removed" 来实现这一点-请参阅 http://fabricjs.com/events/。 - kangax
@kangax 看起来 setBackgroundColor、setHeight 或 setWidth 操作不会触发这些事件。 - Michael J. Calkins
2个回答

5
不要忘记检查新增/删除的对象。您可以按照以下方式实现它:
var canvasModifiedCallback = function() {
console.log('canvas modified!');
};

canvas.on('object:added', canvasModifiedCallback);
canvas.on('object:removed', canvasModifiedCallback);
canvas.on('object:modified', canvasModifiedCallback);

3

这个链接可以更好地解释这个问题。使用方法如下:

canvas.on('object:moving', function(e) { // or 'object:added'
  var activeObject = e.target;
  console.log(activeObject.get('left'), activeObject.get('top'));
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接