优缺点分析:
(1)、利用DOM改写为canvas的方式:至关于彻底重写了整个页面的布局样式,增长了工做量。 因为canvas中没有的对象概念,对于元素丰富、布局复杂的页面,不易重构。 全部DOM元素改写进canvas会带来一些困难。例如:难以支持响应式。
(2)、利用HtmlCanvas的方式:只需简单调用html2canvas方法并设定配置项便可。脚本使用的全部图像须要驻留在同一个源下,若是页面上有其余画布元素,这些元素已经被跨源内容污染,再也不能被html2canvas读取。
(3)、使用rasterizeHTML.js实现:限制较多,目前仅支持3类可转为canvas的目标格式: 页面url,html字符串和document对象。html
脚本容许你直接在用户浏览器上获取网页的截图或部份内容。屏幕截图是基于DOM的,所以对于真实的表示来讲,它可能不是100%准确的,由于它不作实际的屏幕截图,而是基于页面上可用的信息构建屏幕截图。它实际上并不获取页面的屏幕截图,而是基于从DOM读取的属性构建页面的表示。所以,它只能正确地描述它所理解的属性,这意味着有许多CSS属性不起做用。npm
安装 npm install html2canvas
引入 import html2canvas from ‘html2canvas’;
canvas
名称 | 默认 | 描述 |
---|---|---|
async | true | 是否异步解析和呈现元素 |
allowTaint | false | 是否容许跨原始图像污染画布 |
backgroundColor | #ffffff | 画布背景颜色,若是在DOM中未指定,设置 null 为透明 |
canvas | null | 现有画布元素用做绘图的基础 |
foreignObjectRendering | false | 是否在浏览器支持的状况下使用ForeignObject渲染持 |
imageTimeout | 15000 | 加载图像的超时(以毫秒为单位,设置 0 为禁用超时 |
ignoreElements | (element)=>false | 谓词函数,用于从渲染中删除匹配元素 |
logging | true | 启用日志记录以进行调试 |
onclone | 在克隆文档进行渲染时调用的回调函数可用于修改将在不影响原始源文档的状况下呈现的内容。 | |
proxy | null | Url到 代理 ,用于加载跨源图像。若是留空,则不会加载跨原始图像。 |
removeContainer | true | 是否要清理克隆的DOM元素html2canvas会暂时建立 |
scale | window.devicePixelRatio | 用于渲染的比例,默认为浏览器设备像素比率 |
useCORS | false | 用来设置是否容许使用跨域的图片进行访问 |
width | element width | canvas的宽度 |
height | element height | canvas高度设定 |
x | element x-offset | 裁剪画布x坐标 |
y | element y-offset | 裁剪画布y坐标 |
scrollX | element scrollX | 渲染元素时使用的x滚动位置(例如,若是Element使用 position: fixed ) |
scrollY | element scrollY | 渲染元素时使用的y滚动位置(例如,若是Element使用 position: fixed ) |
windowWidth | Window.innerWidth | 渲染元素时使用的窗口宽度,这可能会影响媒体查询之类的东西 |
windowHeight | Window.innerHeght | 染时使用的窗口高度 Element ,这可能会影响媒体查询等内容 |
taintTest | true | 在渲染前测试图片 |
html2canvas(document.body).then(function(canvas) { document.body.appendChild(canvas); });
<canvas width="320" height="180" style="width:160px;height:90px;"></canvas>
.targetElem {width: 54px;height: 142px;margin-top:2px;margin-left:17px;transform: scale(0.5)}