96SEO 2026-09-03 07:27 35
点赞 + 关注 + 收藏 = 学会了
在实际项目中,最常遇到的需求是「把页面上的某块内容保存为图片」——比如生成分享海报、保存订单凭证、或是做离线文档。传统做法需要后端渲染或调用第三方截图服务,既麻烦又不够实时。html2canvas 这款纯前端的 JavaScript 库。直接在浏览器里把 HTML 元素「拍」成 Canvas 图片,让这些需求变得轻松可控。

根据项目的技术栈选择合适的方式即可。
如果你的项目使用 Webpack、Vite 等建立工具。直接通过包管理器引入:
# npm
npm install html2canvas
# yarn
yarn add html2canvas
下面示例基于 Vite 创建的 Vue3 项目,其他框架的使用方式基本相同。
对于纯 HTML 页面只需在
或
中加入 CDN 链接:
痛点:第一次使用时往往只想「点按钮」就能得到图片,却常因样式缺失、跨域图片或滚动条等问题导致截图不完整。其实,下面先给出最小可运行示例,再逐步说明常见坑。老实说,
随便写点什么html2canvas 会把它变成图片~
如果在截图区域加入 默认样式往往会丢失。
雷猴
随便写点什么...
方法:为所有标签显式写样式,避免浏览器默认样式被忽略。
这是要截图的内容
随便写点什么...
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
scale | number | window.devicePixelRatio | 缩放比例,提高清晰度;设为 1 可防止模糊。 |
useCORS | boolean | false | true 时允许加载跨域图片。按理说, |
backgroundColor | string | #ffffff | Cavnas 背景色。设为 null 可得到透明背景。 |
logging | boolean | false | true 时在控制台输出调试信息。 |
scrollX / scrollY--截屏时的滚动偏移,用于修正滚动导致的错位。 |
If your screenshot contains images hosted on anor domain,y will appear blank by default due to browser's same‑origin policy.
Solve it in two steps:
{ useCORS: true }.
// 示例
const canvas = await html5 canvas
Some advanced CSS are not fully supported by html5 canvas.
When using @font-face。screenshots may fall back to system fonts because font hasn't finished loading.
document . get Element By Id . add Event Listener => {
// 等待所有字体加载完成
await document . fonts . ready;const element = document . get Element By Id;const canvas = await html5 canvas;说起来,document . body . append Child;}),按理说,
当目标元素内部出现滚动条时截屏会把滚动条一起捕获或出现内容被裁剪的问题。
const el = document . get Element By Id;const originalOverflow = el . style . overflow;其实,// 保存原始值
el . style . overflow = ' hidden ';话说回来,// 隐藏滚动条
const canvas = await html5 canvas;el . style . overflow = originalOverflow;// 恢复
Directly capturing an inline SVG may result in distortion or missing graphics.
// 将 SVG 转为 Image 再截取
const svgEl = document . query Selector;const svgData = new XMLSerializer . serialize To String;const img = new Image;img.src = ' data:image/svg+xml;base64,' + btoa ));
img.onload = async => { svgEl . parentNode . replace Child;const canvas= await html5 canvas );document . body . append Child;},
&
lt;按理说,div ref =" capture Ref "class =" capture -area ">
&
lt;老实说,h_ lclass =" title ">这是要 截 图 的 内 容 &
lt;/ h_ l &
gt,&
lt;img src =" https://iili.io/fcR7gSe.md.png " alt=""style ="width :140 px;"&
gt,&
lt;pstyle ="font -size :16 px;">随便写点什么...
&
lt;/ p &
gt,&
lt;/ div &
gt,&
lt;button @click =" handle Capture "& g t;点击 截 图&
lt,/ button &
gt;&
lt,/ div &
gt;&
lt,/ template>& n
<& script setup>& n import {ref}from'vue';import html5 canvasfrom'html5 canvas';说起来,
const captureRef=ref;const handleCapture=async=>{ const c anvas=await html5ca nvas;// 转成 PNG Base64 const imgData=c anvas.toDataURL;// 创建下载链接并触发 const link=document.createElement;link.download='我的截图.png';link.href=imgData;link.click,};<&/script>& n
<& style scoped>& n .capture-area{ 至于width,400px;border:1px solid #ccc;} .title{font-size:24px;font-weight:bold;margin:10px,} <&/style>& n
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback