画布 SVG 管理
更新时间 2025/02/05 08:08:31
画布 Web SDK 支持提供 SvgManager 来管理画布中使用的 svg 资源,主要原理是在 document.body 中添加 <svg>
标签,然后将每一个 svg 的内容放到 <symbol>
中,为每个 <symbol>
添加 id,然后在使用的时候使用 <use>
标签,可以重复利用 symbol 中的 svg 图标。
初始化加载
在页面加载完成后的时候可以执行统一加载,这会创建一个 svg container DOM,这个容器在当前项目全局只会创建一次,后续的所有操作都是基于这个容器,如果您不想创建容器,每个方法都支持传入自定义容器,保证是 svg
就可以。
import { SvgManager } from '@plaso-infi/whiteboard-sdk';
const ICON_PREFIX = 'default-';
const DEFAULT_ICON = {
[`${ICON_PREFIX}setting`]: `<g fill-rule="evenodd" fill="none"><path d="M0 0h24v24H0z"/><path data-follow-fill="currentColor" fill="currentColor" d="M4 4h16a1 1 0 0 1 0 2H4a1 1 0 1 1 0-2Zm0 7h16a1 1 0 0 1 0 2H4a1 1 0 0 1 0-2Zm0 7h16a1 1 0 0 1 0 2H4a1 1 0 0 1 0-2Z"/></g>`,
[`${ICON_PREFIX}no-background`]: `<g fill="none" fill-rule="evenodd"><path d="M0 0h24v24H0z"/><path data-follow-fill="currentColor" d="M20.868 7.374A9.957 9.957 0 0 1 22 12c0 5.523-4.477 10-10 10a9.957 9.957 0 0 1-4.626-1.132l1.502-1.5c.96.407 2.016.632 3.124.632a8 8 0 0 0 7.367-11.124l1.501-1.502Zm-1.09-3.152a1 1 0 0 1 0 1.414L5.636 19.778a1 1 0 1 1-1.414-1.414L18.364 4.222a1 1 0 0 1 1.414 0ZM12 2a9.96 9.96 0 0 1 4.626 1.132l-1.502 1.5A8 8 0 0 0 4.633 15.124l-1.501 1.503A9.957 9.957 0 0 1 2 12C2 6.477 6.477 2 12 2Z" fill="currentColor" fill-rule="nonzero"/></g>`,
};
useEffect(() => {
SvgManager.load(DEFAULT_ICON);
}, []);
执行完后 svg container 下面会挂载所有的 svg 资源到 svg container 的 <symbol>
并增加相应的 id,如果您不想增加一个 svg container 可以直接使用 add
方法。
关于 prefix ,这个没有强制规定都是由外部自己定,但是一定要保证传入的 Map 的 key 值,一定要和使用 use
的时候传入 id 的值保持一致!