【问题标题】:Callback function for Fabric.js renderAll method?Fabric.js renderAll 方法的回调函数?
【发布时间】:2015-09-01 19:30:02
【问题描述】:

我正在使用 Fabric.js,需要在 renderAll 完全完成后调用一个函数。这似乎是存在的简单功能,但我的搜索、文档阅读等都是空的。如果有人有解决方案,我将不胜感激。

canvas.deactivateAll().renderAll();
// I need a save function called here, after the above has completed

我尝试绑定到画布的 after:render 方法,但它会被每个对象调用,而不是所有对象。

canvas.on('after:render', function() {
  // call the save function here
});

我想我可以做的是计算画布对象的数量,然后在 after:render 方法上增加一个计数器,然后检查计数器是否 === 对象的数量,如果是,则调用保存功能。不过,这对我来说似乎相当令人费解。

(作为更多背景,如果有另一种方法可以实现我的需要,我需要保存一个画布图像,但首先需要取消选择所有对象,这样图像就不会在显示手柄的情况下保存。)

【问题讨论】:

    标签: fabricjs


    【解决方案1】:

    我找到了使用 deactivateAllWithDispatch 方法的解决方案,该方法会触发 selection:cleared 侦听器事件。在那个事件函数中,如果设置了 deactivateCallback 方法,我将执行它。

    canvas.on('selection:cleared', function() {
      if (deactivateCallback) {
        executeCallbackFunction(renderCallback, window);
        deactivateCallback = null;
      }
    });
    
    deactivateCallback = callback;
    canvas.deactivateAllWithDispatch();
    

    (注意:上面代码中的executeCallbackFunction与答案没有直接关系,只是执行一个字符串传入的函数)

    【讨论】:

      【解决方案2】:

      因此,您需要停用所有元素。我不知道为什么canvas.deactivateAll() 不行。这个jsFiddle对你有帮助吗?

      【讨论】:

      • 感谢您的回复。不幸的是 deactivateAll 似乎是异步的,所以当有不止 1 或 2 个(我不知道确切的截止)画布对象时,在代码中调用它之后的任何方法都会在 deactivateAll 完成之前执行。至少这是我看到的比赛条件。
      猜你喜欢
      • 2017-06-06
      • 2017-10-24
      • 1970-01-01
      • 1970-01-01
      • 2018-05-08
      • 2017-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多