html2Canvas截图包含滚动条解决思路

概况描述

在项目中使用html2Canvas进行截图时发现无法截取滚动条部分,前端是使用vue2的版本,网上找了很多方式都没效果,冷静思考后,给出解决办法。

解决思路

当我们截取的div容器的宽和高与内部的子容器div的宽和高不一样时,内部div就会出现滚动条,因为我们截取的div与内部div的宽和高不一致,所以截取时只能截取我们定位的div,无法截取到滚动条部分。

在截取时将定位的div宽和高改为和内部div容器的宽和高一致,截取时就能包含滚动条部分,截取结束后将定位的div的宽和高恢复原来的值,让界面正常

图片展示 

  • 原来包含滚动条的界面

  •  html2Canvas截取的图片(未添加处理办法时)

  • 使用上面处理思路后的截图

  • 解决思路的代码

  

<div class="about" id="capture" ref="capture">
    <!-- 内部容器div此处就省略了-->
</div>

let targetDom = this.$refs.capture;   //原本需要截图的div
        this.$nextTick(() => {
          const swidth = document.querySelector('.gantt_data_area'); // 定位到内层出现滚动条div宽度
          targetDom.style.width = `${swidth.offsetWidth+250}px`;
          setTimeout(() => {
            html2canvas(targetDom,{
              dpi: window.devicePixelRatio * 4,
              scale: 4,
              useCORS: true, //允许canvas画布内可以跨域请求外部链接图片, 允许跨域请求。
              allowTaint: false,
              height: targetDom.scrollHeight,  //画布高度(包含未显示的滚动部分)
              width: targetDom.scrollWidth,  //画布高度(包含未显示的滚动部分)
              windowWidth: targetDom.scrollWidth,
              windowHeight: targetDom.scrollHeight,
            }).then((canvas) => {
              var imgUri = canvas.toDataURL('image/png').replace('image/png', 'image/octet-stream') // 获取生成的图片的url
              var saveLink = document.createElement('a')
              saveLink.href = imgUri
              saveLink.download = 'downLoad.png'
              saveLink.click()
              targetDom.style.width = '100%'; // 截图结束后需要将修改的宽度高度恢复
              targetDom.style.height = '100%';
            });
          }, 1000);
        });

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值