滚动截图

项目需求要进行动态的滚动截图搜索一下发现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. 基于java 合并.doc和docx格式的Word文件

    注:摘录自 https://www.cnblogs.com/shenzhouyh/articles/7243805.html 之前用过jacob 合并.doc,但是是有jacob有弊端: 服务器必须是 ...

  2. Swift字符串的介绍

    字符串的介绍 字符串在任何的开发中使用都是非常频繁的 OC和Swift中字符串的区别 在OC中字符串类型时NSString,在Swift中字符串类型是String OC中字符串@"" ...

  3. array_intersect_key 取得需要字段 用法

    $need_key = [ 'hash' => 0 ];        $parma = array_intersect_key( $parmas, $need_key );

  4. Kubernets-初见

    只是入门文档. 使用 linux 通过 java -jar 方式部署单体架构,war 包丢tomcat. 使用 Docker部署微服务架构. 使用 K8s Pod 进行部署 一个一个 服务 命令 je ...

  5. 【论文总结】Zero-Shot Semantic Segmentation

    论文地址:https://arxiv.org/abs/1906.00817 代码:https://github.com/valeoai/ZS3 一.内容 Step 0:首先使用数据集(完全不包含 Un ...

  6. Solution -「CEOI 2017」「洛谷 P4654」Mousetrap

    \(\mathscr{Description}\)   Link.   在一个含 \(n\) 个结点的树形迷宫中,迷宫管理者菈米莉丝和一只老鼠博弈.老鼠初始时在结点 \(y\),有且仅有结点 \(x\ ...

  7. Spring Boot数据访问之Druid连接池的配置

    在Spring Boot数据访问之数据源自动配置 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中数据源连接池方式缺省(type)情况下默认使用HikariCP,那不缺省如何配置呢?我们 ...

  8. 聊聊MySQL的加锁规则《死磕MySQL系列 十五》

    大家好,我是咔咔 不期速成,日拱一卒 本期来聊聊MySQL的加锁规则,知道这些规则后可以判断SQL语句的加锁范围,同时也可以写出更好的SQL语句,防止幻读问题的产生,在能力范围内最大程度的提升MySQ ...

  9. Eureka工作原理及心跳机制

    Eureka原理 1.基本原理上图是来自eureka的官方架构图,这是基于集群配置的eureka:处于不同节点的eureka通过Replicate进行数据同步Application Service为服 ...

  10. python3监控网站状态

    前面已经写过Python3发邮件,Python发微信的文章了.直接导入即可. import configparser,requests from time import sleep import We ...