Skip to content

HanziWriterCanvas — HanziWriter 画布封装

文件: web/src/modules/write/components/HanziWriterCanvas.vue

职责

HanziWriter 库的 Vue 3 封装,支持描红(quiz)和演示(animate)两种模式。处理画布生命周期、数据加载、模式切换。

属性

属性类型默认值说明
charstring(必填)汉字字符
modestring"animate"模式:"animate""quiz"
showHintAfterMissesnumber | booleanfalse描红模式下错误几次后提示

事件

事件参数说明
load-successdata笔顺数据加载成功
load-errorerr笔顺数据加载失败
correct-stroke-单笔正确(quiz 模式)
mistakestrokeData书写错误(quiz 模式)
completesummaryData描红完成(quiz 模式)

暴露方法

方法说明
animateCharacter(options)播放笔顺动画
cancelQuiz()取消描红练习
startQuiz()开始描红练习
showOutline()显示轮廓
hideOutline()隐藏轮廓
showCharacter()显示完整汉字
hideCharacter()隐藏汉字
initWriter()初始化 HanziWriter 实例
resetAndRestartQuiz()原子化重置描红:cancelQuiz → showOutline → startQuiz
resetToOutline()隐藏汉字 + 显示轮廓

HanziWriter 配置

配置项说明
width/height240画布尺寸
padding20内边距
strokeColor#3b82f6笔画颜色
outlineColor#e5e7eb轮廓颜色
highlightColor#3b82f6高亮颜色
drawingColor#1f2937描红绘制颜色
radicalColor#6366f1部首颜色
strokeAnimationSpeed1动画速度
strokeFadeDuration0笔画淡出时长
delayBetweenStrokes300笔画间延迟
drawingWidth24描红绘制宽度

数据加载

  • 通过 resource-service.tsgetHanziWriterData() 加载
  • 加载中显示 t-loading 组件
  • char 变化时销毁旧实例并重建
  • mode 变化时通过 setCharacter() 重置而非重建

生命周期

  • onMounted: 初始化 HanziWriter
  • watch char: 销毁旧实例 → 清空画布 → 重新初始化
  • watch mode: 通过 setCharacter() 重置状态
  • onBeforeUnmount: 取消描红 → 清空画布 → 销毁实例