【问题标题】:HTML5 canvas and drawImageHTML5 画布和 drawImage
【发布时间】:2014-08-31 01:10:05
【问题描述】:

我正在构建一个图表编辑器,它工作正常,拖放、复制和粘贴一切工作正常。但我在图像方面遇到了麻烦。我有一个每次发生变化时都会运行的 render() 函数。在渲染函数内部,我调用了 appendImg 代码。这在第一次运行渲染时非常有效。但是下一次,我进入 else 代码块,图像没有在画布上呈现。我有这个 if.else 逻辑她,因为如果我每次运行 img.onload somthing 更改每次加载图像,我会在屏幕上得到很多闪烁。 据我所知,当 img obj 已存储在数组中时,drawImage 会很喜欢它,但我似乎无法理解它。

var images = []; //An array where images are stored.

appendImg = function(inx, url, x, y, w, h) {

  if (!images[inx]) {
    var img = new Image();
    img.onload = function()
    {
        dg_context.drawImage(img, x, y, w, h);
        images[inx] = img;
    }
    img.src = url;
  }else{
    var img = images[inx];
    console.log(img);
    dg_context.drawImage(img, x, y, w, h);
  }
}

【问题讨论】:

    标签: html canvas


    【解决方案1】:

    尝试将 inx 存储为 img 的属性,以便在 onload 中记住 inx:

    var images = []; //An array where images are stored.
    
    appendImg = function(inx, url, x, y, w, h) {
    
      if (!images[inx]) {
        var img = new Image();
        img.onload = function()
        {
            dg_context.drawImage(img, x, y, w, h);
            images[img.index] = img;
        }
        img.index=inx;
        img.src = url;
      }else{
        var img = images[inx];
        console.log(img);
        dg_context.drawImage(img, x, y, w, h);
      }
    }
    

    【讨论】:

    • 不,不是这样(我试过了)。但正如我所说:图像是在第一次加载时加载的,所以它在 .onload 中工作。问题是,当我在 else 代码块中时,似乎没有加载图像。我做了一个console.log(img),它正在打印一个带有currekt url的标签。但是 img 只是在最后一个 drawImage 上绘制
    猜你喜欢
    • 2013-05-06
    • 2013-09-01
    • 2011-10-27
    • 2012-08-28
    • 2015-08-12
    • 2016-06-15
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多