# GraphicBaseProps API 文档 本文档由 `DeepSeek R1` 模型生成并微调。 --- ## 接口定义 ```typescript interface GraphicBaseProps extends BaseProps { /** 是否填充(默认 false) */ fill?: boolean; /** 是否描边(默认 false) */ stroke?: boolean; /** 强制先描边后填充(优先级最高,默认 false) */ strokeAndFill?: boolean; /** 填充规则(默认 "evenodd") */ fillRule?: CanvasFillRule; /** 填充样式(颜色/渐变/图案) */ fillStyle?: CanvasStyle; /** 描边样式(颜色/渐变/图案) */ strokeStyle?: CanvasStyle; /** 交互时是否仅检测描边区域(默认 false) */ actionStroke?: boolean; } ``` --- ## 核心属性说明 | 属性 | 类型 | 默认值 | 说明 | | --------------- | ----------------------------------------------- | ----------- | -------------------------------------------------------------- | | `fill` | `boolean` | `false` | 启用填充(需设置 `fillStyle`) | | `stroke` | `boolean` | `false` | 启用描边(需设置 `strokeStyle` 和 `strokeWidth`) | | `strokeAndFill` | `boolean` | `false` | 强制先描边后填充(覆盖 `fill` 和 `stroke` 的设置) | | `fillRule` | `"nonzero"` \| `"evenodd"` | `"evenodd"` | 填充路径计算规则(影响复杂图形的镂空效果) | | `fillStyle` | `string` \| `CanvasGradient` \| `CanvasPattern` | - | 填充样式(支持 CSS 颜色、渐变对象等) | | `strokeStyle` | `string` \| `CanvasGradient` \| `CanvasPattern` | - | 描边样式 | | `actionStroke` | `boolean` | `false` | 设为 `true` 时,交互事件仅响应描边区域(需配合 `stroke` 使用) | --- ## 使用示例(以矩形为例) ### 示例 1:仅填充模式 ```tsx ``` **效果**: - 200x150 矩形 - 无描边效果 --- ### 示例 2:仅描边模式 ```tsx ``` **交互特性**: - 4px 黑色半透明描边 - 鼠标悬停在描边区域才会触发事件 --- ### 示例 3:填充 + 描边(默认顺序) ```tsx ``` **渲染顺序**: 1. 填充黄色背景 2. 在填充层上绘制黑色描边 --- ### 示例 4:强制先描边后填充 ```tsx ``` **渲染顺序**: 1. 绘制紫色描边 2. 在描边层上填充浅紫色 **视觉效果**:描边被填充色覆盖一部分 --- ## 最佳实践 ### 交互增强技巧 ```tsx import { ref } from 'vue'; // 高亮描边交互反馈 const hovered = ref(false); // 使用 void 关键字屏蔽返回值,避免返回值泄漏 const enter = () => void (hovered.value = true); const leave = () => void (hovered.value = false); ; ``` --- ## 注意事项 1. **样式覆盖顺序**: `strokeAndFill` 会强制按 **描边 → 填充** 顺序渲染,忽略 `fill` 和 `stroke` 的独立设置。 2. **路径闭合规则**: `fillRule="evenodd"` 适用于以下场景: ```tsx // 五角星镂空效果 ``` 3. **性能问题**: 多数情况下,图形的性能很好,不需要单独优化,但是如果你使用 `path` 标签,且内容复杂,建议添加 `cache` 属性来启用缓存,避免频繁的复杂图形绘制。