javascript – 在一个画布上绘制多个图像

前端之家收集整理的这篇文章主要介绍了javascript – 在一个画布上绘制多个图像前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个数组,其中包含有关如何绘制图像的所有信息.我想绘制2张图像,当我这样做时,它只绘制最后一张图像.我能做什么?
for(i = 0; i < tiles.length; i++)
{
    var sourceX = tiles[i][5];
    var sourceY = tiles[i][6];
    var sourceWidth = tiles[i][9];
    var sourceHeight = tiles[i][10];
    var destWidth = sourceWidth;
    var destHeight = sourceHeight;
    var destX = tiles[i][7];
    var destY = tiles[i][8];

    var imageObj = new Image();
    imageObj.onload = function()
    {
        context.drawImage(imageObj,sourceX,sourceY,sourceWidth,sourceHeight,destX,destY,destWidth,destHeight);
    };
    imageObj.src = tiles[i][4];
}

解决方法

我无法解释更具体的原因,但这是我想出的解决方案.这个对我有用.
const getContext = () => document.getElementById('my-canvas').getContext('2d');

// It's better to use async image loading.
const loadImage = url => {
  return new Promise((resolve,reject) => {
    const img = new Image();
    img.onload = () => resolve(img);
    img.onerror = () => reject(new Error(`load ${url} fail`));
    img.src = url;
  });
};

// Here,I created a function to draw image.
const depict = options => {
  const ctx = getContext();
  // And this is the key to this solution
  // Always remember to make a copy of original object,then it just works :)
  const myOptions = Object.assign({},options);
  return loadImage(myOptions.uri).then(img => {
    ctx.drawImage(img,myOptions.x,myOptions.y,myOptions.sw,myOptions.sh);
  });
};

const imgs = [
  { uri: 'http://placehold.it/50x50/f00/000?text=R',x: 15,y:  15,sw: 50,sh: 50 },{ uri: 'http://placehold.it/50x50/ff0/000?text=Y',y:  80,{ uri: 'http://placehold.it/50x50/0f0/000?text=G',y: 145,sh: 50 }
];

imgs.forEach(depict);
#my-canvas { background: #7F7F7F; }
<canvas id="my-canvas" width="80" height="210"></canvas>

猜你在找的JavaScript相关文章