【问题标题】:How to add multiple image to canvas using fabricjs如何使用fabricjs将多个图像添加到画布
【发布时间】:2017-05-09 23:17:11
【问题描述】:

我已阅读有关此主题的几个问题/答案,但似乎找不到我的解决方案。很抱歉,如果你们发现这个问题重复了。

这是我的情况; 假设我有一个菜单供用户单击它,它将在画布上显示该选定项目的图像,用户也可以根据需要调整/拖放该图像的大小。现在我只能用这段代码让它工作一次

addAction(selectedAction: any) {
  var canvas = new fabric.Canvas('c');
  var imgObj = new Image();
  imgObj.src = selectedAction.image;
  imgObj.onload = function() {
    var imgInstance = new fabric.Image(imgObj, {
        left: 200,
        top: 200,
      });
    canvas.add(imgInstance);
  }

问题是当用户单击菜单中的另一个项目时,画布上的前一个项目消失了,而不是当前项目显示在画布上。但是如果我点击那张图片,它就会消失并且之前的图片会显示在画布上。

我希望它们同时留在画布上。请指教。

【问题讨论】:

  • 每次调用此函数时,您似乎都在重新创建画布。尝试将其外部化,然后调用 canvas.remove 来删除之前的图像。
  • 感谢您的回答,您能给我一个示例代码吗?我对这些画布的东西真的很陌生。

标签: javascript html image canvas fabricjs


【解决方案1】:

真正的快速回答:http://jsfiddle.net/8yf15nqp/1/

var canvas = ...// setup canvas

function addImage (url) {
    fabric.Image.fromURL(url, function (img) {
        // deal with image
       canvas.add(img);
    });
}

设置一个函数来处理添加,然后在您想要添加新图像时调用它。我假设您希望将 url 传递给函数并执行其他操作,但这是一个非常精简的示例。

【讨论】:

  • 这正是解决方案!非常感谢。
  • @Ben 谢谢。这行得通。为什么只使用fabric.Image.fromURL 多次不起作用?更具体地说,我在循环中使用它,它总是粘贴相同的图像。
  • @Simone 你有代码示例吗?如果没有更多信息,很难说出问题所在。
  • 当然。当我在 for 循环 jsfiddle.net/ialuronico/wsp91yfc/16 中调用您的函数时它可以工作,但是如果我将您的函数内容复制并粘贴到 for 循环 jsfiddle.net/ialuronico/wsp91yfc/15 它就不再工作了
  • 第二个例子不是安全的异步代码。循环的两次迭代都在周围范围内引用相同的pos 变量。因为fabric.Image.fromURL 调用是异步的,所以循环的两次迭代都会执行,然后图像被加载到画布中。因此,两个图像都使用相同的pos 变量加载到画布上。您可以通过尝试移动图像在小提琴中看到这一点,因为第二个图像直接位于下方。我还必须升级到 fabric 1.7.20 才能使演示工作,但这可能无关紧要。
猜你喜欢
  • 2015-03-01
  • 1970-01-01
  • 2019-10-17
  • 1970-01-01
  • 2015-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多