使用html2canvas将页面转为图片并下载

本文介绍了html2canvas插件,它可在用户浏览器上对网页或部分内容“截图”,基于DOM构建。详细说明了其使用步骤,包括下载、引入、使用方法,还给出在Vue中使用的完整代码及页面调用方式,同时提及传参注意事项和滚动条导致图片不完整的解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

插件介绍

直接引用官网上的介绍为

该脚本允许您直接在用户浏览器上拍摄网页或其中一部分的“屏幕截图”。屏幕截图基于DOM,因此可能无法真实表示100%的准确度,因为它无法生成实际的屏幕截图,而是根据页面上的可用信息构建屏幕截图

官网地址:http://html2canvas.hertzen.com/

使用

1、下载插件

npm i -S html2canvas

2、文件中引入插件

import html2canvas from ‘html2canvas’;

3、使用方法

html2canvas(document.body).then(function(canvas) {
    document.body.appendChild(canvas);
});

4、实际在vue中使用效果

为了方便使用,可以直接提取为组件,传参的参数为当前所要转为图片的dom的id或者类名,完整代码如下:

<template>
  <div class="canvas-load-img" @click="loadImg" ref="canvasLoadImg">
    点击下载
  </div>
</template>

<script>
// 引入html2canvas
import html2canvas from 'html2canvas';

export default {
  // 导出图片组件
  name: 'CanvasLoadImg',
  props: {
    // 需要导出图片的选择器名称,不传则默认导出整个body
    selector: {
      type: String,
      default: 'body'
    }
  },
  methods: {
    async loadImg() {
      // 获取到当前页面滚动距离,纵向y,横向x
      const y = window.pageYOffset || document.documentElement.scrollTop
      || document.body.scrollTop || 0;
      const x = window.pageXOffset || document.documentElement.scrollLeft
      || document.body.scrollLeft || 0;
      // 获取到当前需要转为图片的dom
      const dom = document.querySelector(this.selector);
      const canvas = await html2canvas(dom,
        {
          scrollY: -y,
          scrollX: -x,
          width: dom.clientWidth, // dom 原始宽度
          height: dom.clientHeight
        });
      canvas.scrollY = 0;
      canvas.y = 0;
      const url = canvas.toDataURL('image/png'); // 方法返回一个包含图片展示的 data URI 
      const a = document.createElement('a'); // 生成一个a元素
      const event = new MouseEvent('click'); // 创建一个单击事件
      a.download = 'photo'; // 设置图片名称
      a.href = url; // 将生成的URL设置为a.href属性
      a.dispatchEvent(event); // 触发a的单击事件
    }
  }
};
</script>

<style scoped>
.canvas-load-img{
  line-height: 16px;
  cursor: pointer;
}
</style>

5、页面调用组件

<v-load-img selector="#company" />

6、注意事项

selector参数传参时需要注意,类名带上 ‘.’ ,id名带上‘#’

7、问题解决

在实际使用中,发现在页面有滚动条时,并且下载图片时页面已经有滚动距离,下载的图片是不完整的,解决方法为获取到当前页面的滚动距离,调用html2canvas时传参scrollX、scrollY,即可解决,上方组件代码已经解决此问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值