我在使用html2canvas的时候出现一个生成的图片偏移不完整的情况

发布于 2022-09-12 23:33:37 字数 1575 浏览 27 评论 0

我在使用的时候遇到一个问题:在页面出现滚动条的时候,生成的图片会出现偏移不完整的情况,网上的方法大致都试过了,但是都没有作用,有哪位知道怎么解决吗?

import HTML2Canvas from 'html2canvas'
function getWinClientHeight() {
  let clientHeight = 0
  if (document.body.clientHeight && document.documentElement.clientHeight) {
    clientHeight = (document.body.clientHeight < document.documentElement.clientHeight) ? document.body.clientHeight : document.documentElement.clientHeight
  } else {
    clientHeight = (document.body.clientHeight > document.documentElement.clientHeight) ? document.body.clientHeight : document.documentElement.clientHeight
  }
  return clientHeight
}
function getDocClientHeight() {
  return Math.max(document.body.scrollHeight, document.documentElement.scrollHeight)
}
export default async function (el, beforeCallBack, afterCallBack) {
  if (typeof el === 'undefined') {
    console.error('必须传入一个元素')
    return false
  }
  if (typeof beforeCallBack !== 'undefined') {
    beforeCallBack()
  }
  const scale = 1.5
  const scrollY = window.scrollY
  const scrollX = getDocClientHeight() > getWinClientHeight() ? -8.3 : 0
  const canvas = await HTML2Canvas(el, {
    width: el.clientWidth,
    height: el.clientHeight,
    backgroundColor: null,
    scale,
    scrollX,
    scrollY: -scrollY,
    useCORS: true
  })
  if (typeof afterCallBack !== 'undefined') {
    afterCallBack(canvas)
    return false
  }
  const resolveUrl = canvas.toDataURL('image/png', 1.0)
  return resolveUrl
}

原本没有设置scrollX和scrollY的时候,是向下偏移的,设置了之后就向上偏移了。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

花期渐远 2022-09-19 23:33:37

确实是滚动条问题,生成的时候需要滚动条top为0

鹤仙姿 2022-09-19 23:33:37

这问题我以前碰到过, 发一下之前用的代码

const obj = document.querySelector(".content")
const rect = obj.getBoundingClientRect();

const canvasResult = await html2canvas(obj, {
  allowTaint: true,
  useCORS: true,
  x: rect.left,
  y: window.pageYOffset + rect.top,
})
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文