剪切板 Clipboard
剪切板用于复制/粘贴节点和边,并支持跨画布的复制/粘贴,创建画布时通过以下配置启用。
const graph = new Graph({
clipboard: true,
})
// 等同于
const graph = new Graph({
clipboard: {
enabled: true,
}
})创建画布后,可以调用 graph.enableClipboard() 和 graph.disableClipboard() 来启用和禁用剪贴板。
if (graph.isClipboardEnabled()) {
graph.disableClipboard()
} else {
graph.enableClipboard()
}持久化
开启 useLocalStorage 后,被复制的节点/边同时被保存到 localStorage 中,浏览器刷新或者关闭后重新打开,复制/粘贴也能正常工作。
可以在创建画布时全局开启。
const graph = new Graph({
clipboard: {
enabled: true,
useLocalStorage: true,
}
})也可以在调用以下三个方法时开启。
- graph.copy(cells: Cell[], options: CopyOptions = {})
- graph.cut(cells: Cell[], options: CopyOptions = {})
- graph.paste(options: PasteOptions = {}, targetGraph: Graph = this)
例如:
graph.copy(cells, {
useLocalStorage: true,
})演示
- 选中节点后,点击复制按钮复制节点。
- 设置不同的
offset,观察粘贴时对节点位置的影响。 - 启用
localStorage后复制节点,刷新页面或重新打开浏览器后,点击粘贴按钮。
API
graph.copy(...)
copy(cells: Cell[], options: CopyOptions = {}): this复制节点/边。
参数
| 名称 | 类型 | 必选 | 默认值 | 描述 |
|---|---|---|---|---|
| cells | Cell[] | ✓ | 被复制的节点/边。 | |
| options.deep | boolean | - | 是否递归复制所有子节点/边。 | |
| options.useLocalStorage | boolean | - | 是否将复制的节点/边保存在 localStorage 中。 |
graph.cut(...)
cut(cells: Cell[], options: CopyOptions = {}): this剪切节点/边。
参数
| 名称 | 类型 | 必选 | 默认值 | 描述 |
|---|---|---|---|---|
| cells | Cell[] | ✓ | 被剪切的节点/边。 | |
| options.deep | boolean | - | 是否递归复制所有子节点/边。 | |
| options.useLocalStorage | boolean | - | 是否将复制的节点/边保存在 localStorage 中。 |
graph.paste(...)
paste(options?: PasteOptions, graph?: Graph): Cell[]粘贴,返回粘贴到画布的节点/边。
参数
| 名称 | 类型 | 必选 | 默认值 | 描述 |
|---|---|---|---|---|
| options.useLocalStorage | boolean | - | 是否使用 localStorage 中的节点/边。 | |
| options.offset | number | { dx: number; dy: number } | 20 | 粘贴到画布的节点/边的偏移量。 | |
| options.nodeProps | Node.Properties | - | 粘贴到画布的节点的额外属性。 | |
| options.edgeProps | Edge.Properties | - | 粘贴到画布的边的额外属性。 | |
| graph | Graph | this | 粘贴的目标画布,默认粘贴到当前画布。 |
graph.getCellsInClipboard()
getCellsInClipboard: Cell[]获取剪切板中的节点/边。
graph.cleanClipboard()
cleanClipboard(): this清空剪切板。
graph.isClipboardEmpty()
isClipboardEmpty(): boolean返回剪切板是否为空。
graph.isClipboardEnabled()
isClipboardEnabled(): boolean返回是否启用了剪切板。
graph.enableClipboard()
enableClipboard(): this启用剪切板。
graph.disableClipboard()
disableClipboard(): this禁用剪切板。
graph.toggleClipboard(...)
toggleClipboard(enabled?: boolean): this切换剪切板的启用状态。
参数
| 名称 | 类型 | 必选 | 默认值 | 描述 |
|---|---|---|---|---|
| enabled | boolean | - | 是否启用剪切板,缺省时切换剪切板的启用状态。 |
事件
clipboard:changed
复制、剪切、清空剪切板时触发。
graph.on('clipboard:changed', ({
cells: Cell[]
}) => {
// code here
})