美文网首页
html2canvas---踩坑记录

html2canvas---踩坑记录

作者: 修齐治平zzr | 来源:发表于2021-01-07 17:30 被阅读0次
   h5开发中,我们经常会遇到类似‘长按界面保存图片’之类的需求,一般情况下只需要img标签即可长按调用系统级api来保存单张图片或识别二维码。
   但是如果涉及到整个可视界面的保存,则就需要方法把整个界面转化成图片,此时html2canvas.js则是我们的不二之选。
npm install --save html2canvas 
yarn add html2canvas
import html2canvas from 'html2canvas';

componentDidMount() {
  html2canvas(document.body,{
  // options
  }).then(canvas) {
    let base64 = canvas.toDataURL("image/png", 2.0);
    let ele = document.createElement("img");
      ele.setAttribute("src", base64);
      ele.style.width = "100%";
      ele.style['min-height'] = "100%";
      ele.style.top = '0px';
      ele.style.zIndex = 9999;
      ele.style.position = "absolute";
      document.body.appendChild(ele);
  } 
}

option常见可配置项

imageTimeout: 生成图片超时时间,如果设置为0,则不限时间。若超时,控制台会输出报错信息,
ignoreElements: (element) => false 渲染忽略元素,
logging: 布尔值,方便我们定位问题
onclone:  函数类型,在这里你可以操作生成canvas的dom的节点,
removeContainer: 布尔值,默认为true, 是否清理临时dom节点,
x:偏移x轴的距离,
y:偏移y轴的距离,
scrollX:渲染元素时x轴滚动的距离,
scrollY:渲染元素时y轴滚动的距离,
windowWidth:窗口宽度,
windowHeight:窗口高度
   使用方法非常简单,但是稍有不慎就会出现各种各样的问题,因为html2canvas做的是把当前状态下的选中的静态dom转化为canvas,并未涉及到界面滚动,以及一些默认css样式与浏览器默认样式的出入。导致html2canvas‘坑’特别多!

下面盘点一下我在html2canvas中遇到的部分问题,希望能帮到您

1.最常见的,如果界面存在滚动条,而滚动条并未处于顶端,则生成的图片只有当前可视区域。

      y: window.pageYOffset,
      windowHeight: document.body.scrollHeight
      // 只需要option配置y轴方向起点和视窗高度即可解决

2.有时候生成图片不完整。

// 1.可能是照片未加载完成就调用了生成图片的方法
// 2.图片存在跨域问题

// 请在window.onload回调函数中调用。或者界面加载时设置定时器
generateImg = () => {
  html2canvas(document.body, () => {
    // options
  }).then(canvas){
    ...
  }
}

window.onload = () => {
  generateImg()
}
// 或者
window.setTimeOut(() => {
  generateImg()
}, 300)
// 也可以将图片全部转化为base64编码,则不会存在img异步加载和跨域的问题
// 图片跨域
allowTaint: true,
useCORS: true 

3.生成的图片字体大小与dom中不同

// 只需要css规定字体样式即可。html2canvas默认字体样式与浏览器默认不同。

4.在ios下部分图片只显示一半的问题

// 一次我写一个h5的活动界面,出现了一个问题,就是在安卓手机下正常展示无误,
// 但是在ios下图片横向只显示了60%,还有剩下的百分之40是空白,
// 最终通过样式调整定位出问题所在:
// 该图片使用了transform: translateX(),因为此图片要求居中,所以我使用了绝对定位+left: 50% + translateX(-50%)组合。
// 解决方式:
// 1. 修改了居中方式,问题解决。left:0; right: 0
// 2. 兼容苹果写法 -webkit-transform: translateX(-50%);

相关文章

  • html2canvas---踩坑记录

    h5开发中,我们经常会遇到类似‘长按界面保存图片’之类的需求,一般情况下只需要img标签即可长按调用系统级api...

  • 2020-10-19随笔 踩坑0传值

    踩坑:当值传入0时,if条件判断时候会自己转换,记录踩坑。

  • Weex入门踩坑记录

    Weex入门踩坑记录

  • Flutter 开发记录

    Flutter 开发踩坑记录(干货总结)

  • 日常bug记录

    想记录日常碰到的bug,坑踩多了,以后应该碰到坑就比较容易处理或者会少踩坑,后面会慢慢记录bug,截图bug以及最...

  • 没事请多踩踩坑!

    人生事不尽意,别人挖坑我踩坑。 请在这里留下你的踩坑记录,让别人少入坑。

  • Windows下GithubPages博客快速搭建

    Windows下开发坑总是比较多的,但是本人没Mac,只好踩一遍坑记录下。本文主要是安装过程&踩坑记录,故不对细节...

  • Retrofit Https踩坑记录

    Retrofit Https踩坑记录 前言 新司机上路,坑多,本文重点是踩坑,不详细讲retrofit用法,本文不...

  • 个人博客标签分类

    【小结】零碎的小结 【踩坑记录】报错等记录,防止再度踩坑 【总结】比较完整的总结 【想法】自己的一些想法和推论 【...

  • 踩坑记录

    如果当前页面是push出的页面,切换根视图控制器没问题;如果当前页面是present出的页面,切换跟视图控制器之前...

网友评论

      本文标题:html2canvas---踩坑记录

      本文链接:https://www.haomeiwen.com/subject/bswnoktx.html