在日常业务开发里,DOM 截图 几乎是刚需场景。无论是生成分享卡片、导出报表,还是保存一段精美排版内容,前端同学都绕不开它。但问题来了——市面上的截图工具,比如 html2canvas,虽然用得多,却有一个致命缺陷:慢! 普通截图动辄 1 秒以上,大一点的 DOM,甚至能直接卡到怀疑人生,用户体验一言难尽。最近发现一个保存速度惊艳到我的库snapDOM 。

性能上的表现,完全可以用“碾压”来形容:

  • 相比 html2canvas,快 32 ~ 133 倍
  • 相比 modern-screenshot,也快 2 ~ 93 倍
    snapDOM

如何使用 snapDOM

snapDOM 上手非常简单, 学习成本比较低。

1. 安装

通过npm 安装:

npm install @zumer/snapdom

或者直接用 CDN 引入:

<script src="https://cdn.jsdelivr.net/npm/@zumer/snapdom/dist/snapdom.min.js"></script>

2. 基础用法

只需要一行代码,就能把 DOM 节点“变”成图片:

// 选择你要截图的 DOM 元素
const target = document.querySelector('.card');

// 导出为 PNG 图片
const image = await snapdom.toPng(target);

// 直接添加到页面
document.body.appendChild(image);

3. 更多导出方式

除了 PNG,snapDOM 还支持多种输出格式:

// 导出为 JPEG
const jpeg = await snapdom.toJpeg(target);

// 导出为 SVG
const svg = await snapdom.toSvg(target);

// 直接保存为文件
await snapdom.download(target, { format: 'png', filename: 'screenshot.png' });

开发中生成海报并保存到, 是非常常见的需求,以前使用html2canvas,也要写不少代码, 还要处理图片失真等问题, 使用snapDOM,真的一行代码能搞定。

<div ref="posterRef" class="poster">
   ....
</div>

<script setup lang="ts">
  const downloadPoster = async () => {
    if (!posterRef.value) {
        alert("海报元素未找到");
        return;
    }

    try {
        // snapdom 是 UMD 格式,通过全局 window.snapdom 访问
        const snap = (windowas any).snapdom;
        if (!snap) {
            alert("snapdom 库未加载,请刷新页面重试");
            return;
        }
        await snap.download(posterRef.value, {
            format: "png",
            filename: `tech-poster-${Date.now()}`
        });


    } catch (error) {
        console.error("海报生成失败:", error);
        alert("海报生成失败,请重试");
    }
};
</script>

相比传统方案需要大量配置和兼容性处理,snapDOM 真正做到了 一行代码,极速生成。无论是分享卡片、营销海报还是报表导出,都能轻松搞定。

await snap.download(posterRef.value, {
    format: "png",
    filename: `tech-poster-${Date.now()}`
});

总结

在前端开发里,DOM 截图是一个常见但“让人头疼”的需求。

  • html2canvas 代表的传统方案,虽然功能强大,但性能和体验常常拖后腿;
  • 而 snapDOM 借助浏览器原生渲染能力,让截图变得又快又稳。

一句话: 如果你还在为截图慢、卡顿、模糊烦恼,不妨试试 snapDOM —— 可能会刷新你对前端截图的认知。

Last modification:September 10, 2025
如果觉得我的文章对你有用,请随意赞赏