Preview Updated 2026-05-10

DrawingCanvas 画板

SignaturePad 之上的画板:调色板、笔刷尺寸、橡皮擦、撤销 / 重做 / 清空 / 导出。笔画按 stroke 数组持久化,undo/redo 重放即可。

English translation pending This page hasn't been translated yet — falling back to Chinese. PRs welcome on GitHub.

基础用法

画笔栈与橡皮栈都按 DrawingStroke[] 形式存储;undo/redo 通过重放整组笔画实现,因此可序列化保存到后端。

背景 视口
src/App.vue
<script setup lang="ts">
import { ref } from 'vue';
import { CfDrawingCanvas, type DrawingStroke } from '@chufix-design/vue';

const strokes = ref<DrawingStroke[]>([]);
</script>
<template>
  <div class="dc-demo">
    <CfDrawingCanvas :height="280" @change="(s) => (strokes = s)" />
    <code class="dc-demo__meta">{{ strokes.length }} 条笔画</code>
  </div>
</template>
<style scoped>
.dc-demo {
  display: grid;
  gap: 8px;
}
.dc-demo__meta {
  padding: 4px 8px;
  background: var(--bg-inset);
  border-radius: var(--r-2);
  font-size: var(--t-12);
  color: var(--fg-2);
  width: max-content;
}
</style>
<script setup>
import { ref } from 'vue';
import { CfDrawingCanvas } from '@chufix-design/vue';

const strokes = ref<DrawingStroke[]>([]);
</script>
<template>
  <div class="dc-demo">
    <CfDrawingCanvas :height="280" @change="(s) => (strokes = s)" />
    <code class="dc-demo__meta">{{ strokes.length }} 条笔画</code>
  </div>
</template>
<style scoped>
.dc-demo {
  display: grid;
  gap: 8px;
}
.dc-demo__meta {
  padding: 4px 8px;
  background: var(--bg-inset);
  border-radius: var(--r-2);
  font-size: var(--t-12);
  color: var(--fg-2);
  width: max-content;
}
</style>
import { useState } from 'react';
import { CfDrawingCanvas } from '@chufix-design/react';

export default function Demo() {
  const [strokes, setStrokes] = useState([]);
  const [strokes, setStrokes] = useState([]);
  const [strokes, setStrokes] = useState([]);
  return (
    <>
      <CfDrawingCanvas height={280} onChange={setStrokes} />
    </>
  );
}
import { useState } from 'react';
import { CfDrawingCanvas } from '@chufix-design/react';

export default function Demo() {
  const [strokes, setStrokes] = useState([]);
  const [strokes, setStrokes] = useState([]);
  const [strokes, setStrokes] = useState([]);
  return (
    <>
      <CfDrawingCanvas height={280} onChange={setStrokes} />
    </>
  );
}

API

Props

属性类型默认说明
widthnumber | string'100%'
heightnumber | string320
initialStrokesDrawingStroke[][]初始笔画(可从后端拉)
colorsstring[]6 色默认调色板
sizesnumber[][2, 4, 8, 16]笔刷尺寸
backgroundstring'transparent'
toolbarbooleantrue是否显示工具栏
disabledbooleanfalse

Events

事件载荷说明
changestrokes: DrawingStroke[]笔画 / 工具变更后

Exposed methods

  • clear() / undo() / redo()
  • getStrokes() / setStrokes(strokes)
  • toDataURL(type?, quality?) / toBlob(type?, quality?)

反馈与讨论

DrawingCanvas 画板 · Discussion

0
0 / 600
正在加载评论...