📸 SnapDOM
是一个用于将 DOM 元素截图并转换为图片(如 PNG、JPEG)的 JavaScript 工具库。它基于 html2canvas
的核心思想,但进行了优化与封装,使得使用更加简单高效,适用于网页截图、报表导出、分享截图等场景。
🧰 1. 安装 SnapDOM
使用 npm 安装(推荐)
或通过 CDN 引入
<script src="https://cdn.jsdelivr.net/npm/snapdom/dist/snapdom.min.js"></script>
|
🚀 2. 基本用法
示例:将某个元素截图并显示为图片
<div id="screenshot-target" style="width: 300px; height: 200px; background: #f0f0f0; border: 1px solid #ccc;"> <h2>Hello, SnapDOM!</h2> </div> <button onclick="takeScreenshot()">截图</button> <img id="preview"/> <script> async function takeScreenshot() { const element = document.getElementById('screenshot-target'); const image = await SnapDOM(element); document.getElementById('preview').src = image; } </script>
|
⚙️ 3. 配置选项
SnapDOM 支持多种配置参数,以满足不同需求:
SnapDOM(element, options).then(imageUrl => { });
|
参数名 |
类型 |
默认值 |
描述 |
type |
string |
'png' |
输出类型,支持'png' /'jpeg' /'jpg' |
quality |
number |
1 |
图片质量,仅对 jpeg/jpg 生效,范围 [0, 1] |
backgroundColor |
string |
null |
设置背景颜色(覆盖 CSS 中的背景) |
scale |
number |
window.devicePixelRatio |
渲染缩放比例,影响清晰度 |
ignoreElements |
function |
可选 |
返回 true 的元素将不会被渲染 |
onClone |
function |
可选 |
在克隆 DOM 后调用,可进行修改 |
示例:设置背景色和输出格式
SnapDOM(document.getElementById('screenshot-target'), { type: 'jpeg', quality: 0.8, backgroundColor: '#ffffff' }).then(dataUrl => { console.log('截图完成:', dataUrl); });
|
🖼️ 4. 获取 Blob / Base64 / Canvas 对象
默认返回的是 Data URL(data:image/png;base64,...
),你也可以获取原始数据对象:
获取 Blob
const blob = await SnapDOM.toBlob(element, options);
|
获取 Base64 字符串
const base64 = await SnapDOM.toDataURL(element, options);
|
获取 Canvas 元素
const canvas = await SnapDOM.toCanvas(element, options); document.body.appendChild(canvas);
|
📥 5. 下载截图文件
你可以轻松地将截图保存为本地文件:
async function downloadScreenshot() { const element = document.getElementById('screenshot-target'); const dataUrl = await SnapDOM(element, { type: 'png' });
const a = document.createElement('a'); a.href = dataUrl; a.download = 'screenshot.png'; a.click(); }
|
💡 6. 注意事项
- 跨域图片问题 :如果截图区域包含外部图片资源,请确保这些资源启用了 CORS。
- 性能优化 :大页面截图可能会影响性能,建议只截取可视区域或分块处理。
- CSS 样式限制 :某些高级 CSS 特性(如 filter、mask)可能无法完美还原。
- 移动端兼容性 :部分旧设备可能不支持高分辨率截图。
🧪 7. 高级用法示例
忽略特定元素
SnapDOM(element, { ignoreElements: el => el.classList.contains('no-screenshot') });
|
修改克隆后的 DOM
SnapDOM(element, { onClone: (clonedDoc) => { const watermark = clonedDoc.createElement('div'); watermark.textContent = 'Sample Watermark'; watermark.style.position = 'absolute'; watermark.style.top = '10px'; watermark.style.right = '10px'; clonedDoc.body.appendChild(watermark); } });
|
📦 8. 构建与打包(开发者可选)
如果你想要自定义构建 SnapDOM,可以克隆源码并自行编译:
git clone https://github.com/yourname/snapdom.git cd snapdom npm install npm run build
|
📚 9. 相关链接
🤝 10. 结语
SnapDOM 提供了简洁易用的 API 来实现网页截图功能,无论是开发 Web 应用还是制作可视化工具都非常实用。希望这篇教程能帮助你快速上手,并将其应用到实际项目中!