滚动截图

项目需求要进行动态的滚动截图搜索一下发现html2canvas可以实现截图,但是滚动截图网上搜罗了一遍发现不是很完善所以记录下

  • 首先npm一下安装依赖: npm install html2canvas
  • 再需要的页面引入: html2canvas from html2canvas
  • 第三步使用: 直接贴代码
/**
* @description 截图函数
* @params {...Array} 1、DomObj: 需要进行截图的Dom节点; 2、fileName: 截图命名;3、ops: html2canvas配置项;4、计算的截图宽度;
*
**/
downloadImg = (DomObj, fileName, ops = {}, width) => {
return new Promise(resolve => {
setTimeout(() => {
// 复刻需要滚动截图的Dom, 要在改复制的Dom节点加滚动条, 否则会截图失败
let copyDom = null;
const copyOps = ops;
// 检查宽度是否大于项目全屏宽度
let copyWidth = null;
let flag = false;
if (width < 1803) {
copyWidth = 1803;
flag = false;
} else {
copyWidth = width;
flag = true;
copyDom = obj.cloneNode(true);
copyDom.style.width = `${copyWidth + 50}px`;
copyDom.style.height = `${obj.scrollHeight + 50}px`;
// 设置配置项 1、scale: 浏览器缩放值;2、width: 图片宽度;3、height: 图片高度; 4、x(scrollLeft) || y(scrollTop): 滚动轴的起始位置
copyOps.scale = window.devicePixelRatio;
copyOps.width = copyWidth + 50;
copyOps.height = obj.scrollHeight + 50;
copyDom.x = obj.scrollLeft;
// 设置ID为复刻Dom添加样式;
copyDom.id = 'copyDom';
// 将复刻元素插入HTML中
document.querySelector('body').appendChild(copyDom);
}
html2canvas(flag ? copyDom : obj, copyOps).then(canvas => {
const saveUrl = canvas.toDateURL('image/png');
const aLink = document.createElement('a');
aLink.href = saveUrl;
aLink.download = fileName || '图片';
aLink.click();
if (flag) {
//
copyDom.parentNode.removeChild(copyDom);
}
aLink.parentNode.removeChild(aLink);
})
resolve('success');
}, 1)
})
}
  • 最后成功:如下图

Remark: 要注意的点有二

  • 一是哪个Dom节点要滚动截图就在该Dom节点加滚动条
  • 二是配置项设置滚动条初始位值

html2canvas滚动截图的更多相关文章

  1. IText&Html2canvas js截图 绘制 导出PDF

    Html2canvas JS截图 HTML <div id="divPDF"> 需要截图的区域 </div> JS <script src=" ...

  2. html2canvas 网页截图 下载 上传

    利用html2canvas插件 对网页截图 并下载和上传图片. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//E ...

  3. js实现html转pdf+html2canvas.js截图不全的问题

    最近做项目中遇到要把整个页面保存为PDF文件,网上找了一下实现的方法都是 html2canvas.js+jsPdf.js 来实现.实现的过程是 先用html2canvas.js把html页面转成图片, ...

  4. Windows 10 滚动截图工具

    Windows 10 滚动截图工具 Edge & Note & Clip https://www.runoob.com/docker/docker-architecture.html ...

  5. Android之WebView网页滚动截图

    WebView 网页滚动截屏,可对整个网页进行截屏而不是仅当前屏幕哦! 注意若Web页面存在position:fixed; 的话得在调用前设置为 position:absolute; 哦,否则会出现很 ...

  6. html2canvas html截图插件

    以下我总结了一些注意事项,在代码中注释了,仅供参考. html2canvas.js点击付:完整使用的demo ,如下: <!DOCTYPE html><html lang=" ...

  7. JS 使用html2canvas实现截图功能的问题记录和解决方案

    在实现“截图”功能时,遇到几个bug,研究了一个上午,终于全部解决了: 下面给大家分享下: 1."图片资源跨域",导致无法截图. 浏览器会提示下面的错误 DOMException: ...

  8. 微信图片生成插件,页面截图插件 html2canvas,截图失真 问题的解决方案

    html2canvas 是一个相当不错的 JavaScript 类库,它使用了 html5 和 css3 的一些新功能特性,实现了在客户端对网页进行截图的功能.html2canvas 通过获取页面的 ...

  9. Selenium全屏截图,使用PIL拼接滚动截图

    Selenium默认的截图save_screenshot只支持对当前窗口内容进行截图,当如果你想要截取整个网页,那么,可以明确的告诉你. Selenium做不到. 你可以手工使用开发者工具Ctrl+S ...

随机推荐

  1. 截取一段时间内的log日志

    可以使用sed命令对log文件进行抽取操作:1,sed查看某时间段到现在的系统日志:sed -n '/May 20 17/,$p' /var/log/messages | less2,sed 截选时间 ...

  2. 异步回调实现- Guava Retryer

    为什么要使用重试利器Retryer 在实际开发中我们经常会遇到需要轮询查询一个接果,实现轮询的方式有很多种,我们经常要写许多代码,有时还会怕写出的代码有bug,如果已经有轮子了,我们就没必要重复造轮子 ...

  3. Google hacker

    转载请注明来源:https://www.cnblogs.com/hookjc/ Google Hacking其实并算不上什么新东西,在早几年我在一些国外站点上就看见过相关的介绍,但是由于当时并没有重视 ...

  4. 交换机基本原理与VRP基础及操作

    交换机基本原理与VRP基础及操作 目录 交换机基本原理与VRP基础及操作 一.数据链路层 1.数据链路层的位置 2.数据链路层的功能 二.以太网(Ethernet) 1.以太网的概念 2.MAC地址( ...

  5. 2022寒假集训day5

    day5 五道栈的题加上字符串. 单调队列. T1 表达式括号匹配   洛谷P1739 题目描述 假设一个表达式有英文字母(小写).运算符(+,-,*,/)和左右小(圆)括号构成,以"@&q ...

  6. 用Java实现生成图片验证码

    通过代码实现生成一个随机验证码图片,且生成后自动打开: package day_12_17; import javax.imageio.ImageIO; import java.awt.*; impo ...

  7. Scala中的运算符

    Scala和Java中的运算符用法基本一致. 一.区别 1."=="和"equals"的用法 Java: String str1 = "abc&quo ...

  8. 生成一个node项目

    生成一个node项目1.创建文件夹2.文件夹中右键->在此处打开命令窗口->文件夹中打开dos3.执行:npm init //一路回车,最后y4.安装插件: C:\www\nodejs\h ...

  9. 1、网络并发编程--简介、软件开发架构、OSI七层协议

    python复习 变量与常量 基本数据类型 内置方法 字符编码.文件操作 函数 函数参数.闭包函数.装饰器 面向对象 封装.继承.多态 """ 什么是对象 数据与功能的结 ...

  10. [LeetCode]26.删除有序数组中的重复项(Java)

    原题地址: remove-duplicates-from-sorted-array 题目描述: 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的 ...