html2canvas实现指定文档元素截图

本文介绍html2canvas.js脚本的使用方法,该脚本可在浏览器中直接截取网页或其部分区域的屏幕截图。文章详细解释了配置参数,如异步处理、背景颜色、图像加载等,并提供了简单及复杂示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

html2canvas.js

  • html2canvas脚本允许您直接在用户浏览器上截取网页或部分网页的“屏幕截图”。屏幕截图基于DOM,因此它可能不是真实表示的100%准确,因为它没有制作实际的屏幕截图,而是根据页面上可用的信息构建屏幕截图。
  • 参数或者说组态
名称默认描述
asynctrue是否异步解析和呈现元素
allowTaintfalse是否允许跨原始图像污染画布
backgroundColor#ffffff画布背景颜色,如果在DOM中未指定。设置 null 为透明
canvasnullcanvas 用作绘图基础的现有 元素
foreignObjectRenderingfalse是否在浏览器支持的情况下使用ForeignObject渲染
imageTimeout15000加载图像的超时(以毫秒为单位)。设置 0 为禁用超时。
ignoreElements(element) => false谓词函数,用于从渲染中删除匹配元素。
loggingtrue启用日志记录以进行调试
onclonenull在克隆文档进行渲染时调用的回调函数可用于修改将在不影响原始源文档的情况下呈现的内容。
proxynullUrl到 代理 ,用于加载跨源图像。如果留空,则不会加载跨原始图像。
removeContainertrue是否要清理克隆的DOM元素html2canvas会暂时创建
scalewindow.devicePixelRatio用于渲染的比例。默认为浏览器设备像素比率。
useCORSfalse是否尝试使用CORS从服务器加载图像
widthElement widthcanvas的宽度
heightElement heightcanvas的高度
XElement x-offset裁剪画布x坐标
YElement y-offset裁剪画布y坐标
scrollXElement scrollX渲染元素时使用的x滚动位置(例如,如果Element使用 position: fixed )
scrollYElement scrollY渲染元素时使用的y滚动位置(例如,如果Element使用 position: fixed )
windowWidthWindow.innerWidth渲染时使用的窗口宽度 Element ,可能会影响媒体查询等内容
windowHeightWindow.innerHeight渲染时使用的窗口高度 Element ,这可能会影响媒体查询等内容

一个简单的例子

  • 脚本引入,html2canvas去官网下载或者从直接下载我调试过的,不过我调试过的需要2个资源分;
<script src="public/js/html2canvas.js"></script>
<script src="public/js/jquery-2.1.1.min.js"></script>
  • html部分
    html
<div class="btn">点击截图</div>
    <div id="targetDom" class="main">
        <div id="capture" style="padding: 10px; background: #f5da55">
        	<h4 style="color: #000; ">Hello world!</h4>
        <img src="public/avatar/myavatar.jpg" alt="" srcset="">
    </div>
</div>
  • 简单使用html2canvas脚本,第一个参数为要保存内容的元素对象,然后Promise对象会将截取的图片传递给参数canvas,创建一个节点将canvas添加为文档节点可以显示出来,如果直接调用文件保存可以将图片主动保存下来;
$(".btn").on("click", function () {
    html2canvas(document.querySelector("#capture")).then(canvas => {
        document.body.appendChild(canvas)
    });
})

html2canvas内部是异步执行的,然后返回一个Promise对象,使用then方法进行异步执行;

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

里面的坑

  • 脱离了文档流,或者文档流异常的元素会无法被截取下来!一定要清楚记得,它只会截取到目标元素宽高范围内的内容!!!

如果我给图片加一个定位:
在这里插入图片描述
那么截取下来你的图会是这样,虽然img仍然是截取目标里的元素,但是因为目标元素的边界划定了范围使得img不能被截取!
在这里插入图片描述

  • 如果是浮动的元素:
    在这里插入图片描述

截取到的图片是这样的
在这里插入图片描述

一个复杂的例子

在这里插入图片描述

  • 此处仅提供js代码,html结构大家可以去下面的链接看:

let takeScreenShoot = (ele) => {
    // console.log(ele);
    for (let index = 0; index < ele.length; index++) {
        const element = ele[index];
        // console.log(element);
        html2canvas(element).then(canvas => {
            // console.log(canvas);
            doc.appendChild(canvas)
            //html2canvas有bug,保存的图片有白边
            let ctx = canvas.getContext("2d");
            ctx.fillStyle = "red";
            ctx.clearRect(0, 0, 1, 534);
            document.getElementById("theeditor").scrollTo(0, 100000000);
        });
    }
}
btCreatpic.onclick = () => {
    takeScreenShoot(document.getElementsByClassName("resultimg"));
    alert("鼠标右键点击生成的图片即可保存");
}

测试地址点击跳转

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

奔跑的飞牛

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

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

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

打赏作者

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

抵扣说明:

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

余额充值