vue3 中html2canvas用法(屏幕截图)

前言

vue2和vue3用法大致相同,可以直接套用

步骤

1.引入依赖

npm i html2canvas

2.导入方式

import html2canvas from "html2canvas";

3.代码示例

// html
<el-button @click="generateImg">下载pdf</el-button>
<div>
  // 滑动状态也可全部截图
  <el-scrollbar>
    <div id="test-id">
        <img src="@img/admin_logo.jpg" alt="" />
        <div>
          <div>今天是个好天气</div>
          <div>测试截图中</div>
          <div>最后一行</div>
        </div>
    </div>
  </el-scrollbar>
</div>

 // js
 const generateImg = ()=>{
	let el = document.getElementById("test-id");
	let options = {
        width: el.offsetWidth,
        height: el.offsetHeight,
        useCORS: true, // 是否尝试使用 CORS 从服务器加载图像
        allowTaint: false, // 是否允许跨源图像污染画布
	}
	
	html2canvas(el, opts).then((canvas) => {
       let imgData = canvas.toDataURL("image/jpeg"); // 转base64
       fileDownload(imgData);
    });
 };
    
 // 下载图片方法
 const fileDownload = (downloadUrl) => {
	let aLink = document.createElement("a");
	aLink.style.display = "none";
	// 以防base64过长导致下载失败,所以将base64转成blob格式
	aLink.href = URL.createObjectURL(dataURIToBlob(downloadUrl));
	aLink.download = "img.png";
	document.body.appendChild(aLink);
	aLink.click();
	document.body.removeChild(aLink);
 };

 // base64转blob方法
 const dataURIToBlob = (dataURI) => {
	let binStr = atob(dataURI.split(",")[1]),
    len = binStr.length,
	arr = new Uint8Array(len);
    
	for (var i = 0; i < len; i++) {
		arr[i] = binStr.charCodeAt(i);
	}
	return new Blob([arr]);
 };
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
如果你使用 Vuehtml2canvas 库来取某个元素的,但是发现结果不居,可能是因为你没有正确计算元素的位置。以下是一种方法可以帮助你解决这个问题: 1. 首先,获取需要的元素的位置信息。你可以使用 `getBoundingClientRect()` 方法来获取元素的位置信息,例如: ```javascript const element = document.getElementById('my-element') const rect = element.getBoundingClientRect() ``` 2. 计算元素的实际位置。由于 html2canvas取的是整个页面的,因此需要计算元素在页面的实际位置。你可以使用以下公式计算元素的实际位置: ```javascript const actualLeft = rect.left + window.scrollX const actualTop = rect.top + window.scrollY ``` 3. 将元素移动到屏幕央。由于 html2canvas 取的是整个页面的,因此需要将元素移动到屏幕央。你可以使用以下公式将元素移动到屏幕央: ```javascript const centerX = window.innerWidth / 2 const centerY = window.innerHeight / 2 const elementWidth = rect.width const elementHeight = rect.height element.style.position = 'fixed' element.style.left = `${centerX - elementWidth / 2}px` element.style.top = `${centerY - elementHeight / 2}px` ``` 4. 进行。最后,你可以使用 html2canvas 库对元素进行: ```javascript html2canvas(element).then(canvas => { // do something with the canvas }) ``` 这些步骤可以确保元素在时能够居

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值