更新记录
1.0.0(2026-10-31) 下载此版本
- 首个版本,按 uni_modules 规范发布:
uni_modules/czh-canvas,支持插件市场一键导入与从市场更新 - 透明覆盖批注画板:页面内容上手写,多色画笔 / 粗细 / 撤销 / 清空,画笔设置本地持久化
- 保存管线:内容快照 → 铺底色 → 合成笔迹 → 再次快照存相册;快照失败降级为
toDataURL+FileSystemManager落临时文件 - 不依赖任何第三方插件:撤销了对
lime-file-utils的依赖,鸿蒙端改用 uni 内置FileSystemManager.writeFile(HBuilderX 4.61+ 支持)写 base64 - 导航栏四个图标随插件分发(
uni_modules/czh-canvas/static),导入后无需再往项目 static 里拷图 - 颜色面板按可用宽度现算色块尺寸(每行固定 10 个,18~32px),窄屏不再出现最后一个色块换行错位
平台兼容性
uni-app x(4.71)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| √ | √ | √ | √ | √ | √ |
其他
| 多语言 | 暗黑模式 | 宽屏模式 | 蒸汽模式 |
|---|---|---|---|
| × | × | × | √ |
czh-canvas 批注画板组件(uni-app x)
透明全屏手写画板覆盖组件,叠在页面内容上方直接批注,支持多色画笔、粗细调节、撤销、清空, 保存时把页面内容截图与笔迹合成后存入相册。适用于在页面内容上直接批注、手写的场景。
组件为 uni-app x(uvue + UTS + Vue3 组合式 API)实现,easycom 直接使用,无需注册。
本示例工程 pages/index/index.uvue 演示了组件的完整接入方式:自绘导航栏、画板开关、窗口变化重排、保存回调。
安装
组件已按 uni_modules 规范发布,二选一:
- 插件市场:插件详情页点「使用 HBuilderX 导入插件」,选择目标项目,导入后自动落在
uni_modules/czh-canvas; - 手动:把
uni_modules/czh-canvas整个目录复制到项目根目录的uni_modules下。
uni_modules/czh-canvas/
├─ package.json
├─ readme.md
├─ changelog.md
├─ components/czh-canvas/czh-canvas.uvue
└─ static/icon-cross.png · icon-download.png · icon-revoke.png · icon-clear.png
组件位于 uni_modules/*/components/组件名/组件名.uvue,符合 easycom 自动扫描规则:页面里直接写 <czh-canvas>,不需要 import,也不需要注册。
仅支持 uni-app x(uvue),不支持 uni-app(vue2/vue3)。
使用方式
<!-- 页面需 custom 导航并自绘同规格头部:画板覆盖层按 statusBarHeight + 44 定位 -->
<czh-canvas :visible="showCanvas" :scroll-height="scrollHeight" bg-color="#ffffff"
content-element-id="demo-content" @close="onCanvasClose" @save="onCanvasSave"></czh-canvas>
// 页面 时需广播窗口变化,组件监听后重排画布并按比例缩放已有笔迹
(() => {
calcHeight()
uni.$emit('appWindowResize')
})
API
Props
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| visible | boolean | false | 画板显隐;打开时初始化画布(清空上次笔迹) |
| scroll-height | number | 0 | 页面内容区高度(px),决定画布高度;0 时取安全区高度 - 44 |
| content-element-id | string | '' | 保存时参与合成的内容元素 id(如题目区容器);空或不存在的元素时走纯笔迹降级保存 |
| bg-color | string | '#ffffff' | 保存合成图的底色 |
Events
| 事件 | 参数 | 说明 |
|---|---|---|
| close | - | 点击左上角关闭按钮 |
| save | - | 图片成功保存到相册后触发(组件内部已 toast 保存成功) |
关键机制
- 透明覆盖批注:覆盖层
top = statusBarHeight + 44,画布background-color: transparent透出下方页面内容, 在内容上直接手写;安卓端 canvas 的 rgba 透明度会被忽略渲染成浅灰,所以必须用transparent关键字; - 笔迹数据结构:每笔为一组线段(DrawLine:起点/终点/颜色/粗细),笔划(DrawStroke)入历史栈; 撤销 = pop 后整帧重绘,清空 = 清栈 + clearRect;
- 高清屏:按
pixelRatio放大画布物理像素后ctx.scale(dpr, dpr),线条不发虚; - 横竖屏 / 窗口变化:监听
appWindowResize(页面 广播)重算尺寸,已有笔迹按新旧画布比例缩放坐标后重绘,不丢笔迹; - 保存管线:内容元素
takeSnapshot→ 铺bgColor底 → drawImage 合成内容 → 重绘笔迹 → 再次takeSnapshot存相册; 任一环节失败逐级降级:canvastoDataURL+ FileSystemManager 落临时文件(三端同一套代码); - 画笔设置持久化:颜色(storage key
canvas_stroke_style)与粗细(canvas_line_width)写入本地缓存,下次打开保持。 - 颜色面板自适应:每行固定 10 个色块,宽高按
canvasw - 左右 padding - 选中边框反算(18~32px 之间), 360dp 窄屏也不会把最后一个色块挤到下一行;窗口变化时重算。
依赖
- 无第三方插件依赖;保存流程只用 uni 内置 API(
FileSystemManager的writeFile需 HBuilderX 4.61+); - 页面侧约定: 时
uni.$emit('appWindowResize')。
图标
导航栏四个图标为 PNG(颜色 #969799),随插件一起分发:
| 文件 | 图标 | 用途 |
|---|---|---|
| uni_modules/czh-canvas/static/icon-cross.png | 关闭 × | 关闭画板(24px) |
| uni_modules/czh-canvas/static/icon-download.png | 下载 | 保存到相册(20px) |
| uni_modules/czh-canvas/static/icon-revoke.png | 撤销 | 撤销上一笔(20px) |
| uni_modules/czh-canvas/static/icon-clear.png | 清空 | 清空画布(20px) |
四个图标随插件分发,组件内用相对路径(../../static/icon-xxx.png)引用,导入后无需再往项目 static 里拷图。
「更多」按钮为纯 CSS 圆点,未使用图片。示例页的画笔入口图标为项目自己的 /static/edit-note.png。

收藏人数:
下载插件并导入HBuilder
下载示例项目ZIP
赞赏(0)
下载 154
赞赏 0
下载 12730669
赞赏 1959
赞赏
京公网安备:11010802035340号