html2canvas的问题及应用

1.安装方式

1.1 npm 安装

npm install --save html2canvas

1.2 Yarn 安装

yarn add html2canvas

1.3 传统引入

 <script type="text/javascript" src="http://html2canvas.hertzen.com/dist/html2canvas.min.js"></script>

2.使用方式

2.1 HTML

<div id="capture" style="padding: 10px; background: #f5da55">
    <h4 style="color: #000; ">Hello world!</h4>
</div>

2.2 javascript

 html2canvas(document.querySelector("#capture")).then(canvas => {
    document.body.appendChild(canvas);
    const base64 = canvas.toDataURL();	// 可生成base64
});

3.注意事项

3.1 页面滑动时,截图不全。

解:可在截图事件时,把页面滚动条置顶。如:

 document.body.scrollTop = 0

3.2 iOS13 .then无法回调的问题

解:需另外引入rc4版本文件即可
下载地址:https://github.com/niklasvh/html2canvas/releases/tag/v1.0.0-rc.4

3.3 不兼容CSS3

解:最好不要用css3样式去写需要截图的盒子,因为无法呈现。

3.4 图片跨域问题

如遇截图中的图片无法渲染上去,则考虑是跨域问题。
解:在调用html2canvas时,添加{useCORS: true}参数 如:

 html2canvas(document.querySelector("#capture"), {useCORS: true}).then(canvas => {
    document.body.appendChild(canvas);
    const base64 = canvas.toDataURL();	// 可生成base64
});

如果还是无法解决,建议让后端人员转成base64后,再用即可!

3.5 iOS报 ‘maximum call stack size exceeded’

当我们用后端转过来的base64图片时,iOS会因为内容过大,超出最大调用堆栈。
解:可对base64进行转换,转换成blob,再由blob生成objectURL,代码如下:

function base64ToBlob(base64) {
    let parts = base64.split(';base64,');
    let contentType = parts[0].split(':')[1];
    let raw = window.atob(parts[1]);
    let rawLength = raw.length;

    let uInt8Array = new Uint8Array(rawLength);

    for (let i = 0; i < rawLength; ++i) {
        uInt8Array[i] = raw.charCodeAt(i);
    }
    return new Blob([uInt8Array], {type: contentType});
},
let url = URL.createObjectURL(base64ToBlob('base64字符串'))

4.配置参数表

名称默认描述
allowTaintfalse是否允许跨域图像污染画布
backgroundColor#ffffff画布背景色(如果未在DOM中指定)。设置null为透明
canvasnull现有canvas元素用作绘图的基础
foreignObjectRenderingfalse如果浏览器支持,是否使用ForeignObject渲染
imageTimeout15000加载图像的超时时间(以毫秒为单位)。设置0为禁用超时。
ignoreElements(element) => false谓词功能,可从渲染中删除匹配的元素。
loggingtrue启用日志以进行调试
onclonenull克隆文档以进行渲染时调用的回调函数可用于修改将要渲染的内容,而不会影响原始源文档。
proxynull代理将用于加载跨域图像的网址。如果保留为空,则不会加载跨域图像。
removeContainertrue是否清除html2canvas临时创建的克隆DOM元素
scalewindow.devicePixelRatio用于渲染的比例。默认为浏览器设备像素比率。
useCORSfalse是否尝试使用CORS从服务器加载图像
widthElement 宽度canvas的宽度
heightElement 高度canvas的高度
xElement X偏移裁剪画布X坐标
yElement Y偏移裁剪画布y坐标
scrollXElement X滚动渲染元素时要使用的x滚动位置(例如,如果Element使用position: fixed)
scrollYElement Y滚动呈现元素时要使用的y-scroll位置(例如,如果Element使用position: fixed)
windowWidthWindow.innerWidth渲染时使用的窗口宽度Element,这可能会影响媒体查询之类的内容
windowHeightWindow.innerHeight渲染时要使用的窗口高度Element,这可能会影响媒体查询之类的内容

最后提供官方网址:http://html2canvas.hertzen.com/configuration

注:爱护原创,转载请说明出处

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云端君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值