img未能正确渲染图片/记录一次html2canvas生成海报底图丢失问题

情景提要:

     公司做微信 h5 产品,需要生成海报,就是用了 html2canvas 来进行截图处理,底图和二维码之类的图片资源需要动态生成。

开发:

     起初使用 background,然后发现固定图片地址是可以显示,但如果通过 js 动态设置 url 生成海报时会出现空白的情况,经过排查,控制台报跨域,所以改成 img 标签,然后设置cross = ‘anonymous’。

<div  className={styles["background-img"]} >
        <img className="post-img" crossOrigin="anonymous" src={data.haibao + '?type=cors&time=' + new Date().getTime()} />
      </div>

解决跨域后上线,发现部分机型(iphone 6s)会出现海报背景图时有时无,首先考虑是机型问题,但如果是机型问题不应该会出现有时能加载出图片的问题,而型号越新的越不会出现丢失问题,所以考虑是异步问题,img 加载图片资源是异步的,当图片还在下载时,利用 html2canvas 生成时会截取没有加载出来的效果,问题找到了,就是解决方案问题了。

解决方案:

img 有个complete 属性,如果为 true 就加载完毕,所以只要判断 需要加载完毕的 img dom 对应的complete 属性是否全为true就行了,我这边实现的方案是通过setInterval实现,也可以通过 addEventListener 监听 dom 是否渲染完毕实现。

 const img = document.getElementsByClassName('post-img')
        var timer = setInterval(function() {
            let flag = Array.prototype.every.call(img,item=>item.complete)
            if (flag) {
                 callback(img)
                    clearInterval(timer)
                    }
                }, 50)

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Beq

我们应该鼓励分享,开源精神

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值