收藏
回答

canvas中如何控制多个image和text上下层关系,以免覆盖?

我要使用Canvas动态写入多个图片和文本;图片要在Image的onLoad中调用drawImage方法才能写入到Canvas中,但是不同Image的OnLoad方法异步执行的,先执行的Image写在最下层,如何准确控制各个Image的上下关系?

主要JS如下:

var img = canvas.createImage();
    img.src = '/images/hb5.png';
    img.onload = () => {
      // this._img = img;
      console.log('img',img);
      console.log('img.width',img.width);
      console.log('img.height',img.height);
      ctx.drawImage(img,0,0,this.getPx(750),this.getPx(1334));
    }
    var imgHead = canvas.createImage();
    imgHead.src = 'https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eqAE0ydqk97jiaicrjMEhhXDDpgXQkFHRTdaYNEPC222ibMd4lOzOuQaaPLSude6XUdl7G0peAZWhdzw/132';
    imgHead.onload = () => {
      // this._img = img;
      console.log('imgHead',imgHead);
      console.log('imgHead.width',imgHead.width);
      console.log('imgHead.height',imgHead.height);
      var scale = this.getScale(imgHead);
      ctx.drawImage(imgHead,this.getPx(125),this.getPx(20),this.getPx(scale*imgHead.width),this.getPx(scale*imgHead.height));
    }


      ctx.setFontSize = "40";
      // ctx.fillStyle = "rgba(0, 0, 0, 1)";
      ctx.fillText("我是分享文字111111111", this.getPx(100), this.getPx(600));
      ctx.fillStyle = "rgba(0, 0, 0, .5)";
      ctx.fillText("我是分享文字222", this.getPx(100), this.getPx(700));
      ctx.draw()


最后一次编辑于  2021-02-15
回答关注问题邀请回答
收藏

1 个回答

  • Vinlic
    Vinlic
    2021-02-15

    直接使用这种回调方式肯定是不行的,使用Promise+async await处理异步问题控制图片和绘制图片的顺序

    2021-02-15
    有用 1
    回复 2
    • 孩他爸
      孩他爸
      2021-02-15
      多谢,在onload中处理的其他image的onLoad,暂时解决
      2021-02-15
      回复
    • Vinlic
      Vinlic
      2021-02-15回复孩他爸
      这样可以,但是不是长久之计,多了也会陷入回调地狱,有空的时候优化一下吧。
      2021-02-15
      1
      回复
登录 后发表内容
问题标签