Dragging
拖拽框架,为所有拖拽交互提供底层支持。
模块说明
Dragging 是 diagram-js 的拖拽框架,为 Move、Resize、Connect、Create 等功能提供统一的拖拽基础设施。
核心特性
- 统一拖拽API: 统一的拖拽初始化和管理
- 事件生命周期: 标准的 start/move/end/cancel 事件
- 光标管理: 自动设置拖拽光标
- 悬停检测: 检测鼠标悬停在哪个元素上
- 自动激活: 支持延迟激活拖拽(区分点击和拖拽)
模块依赖
javascript
Dragging.$inject = ["eventBus", "canvas", "selection"];主要API
init()
作用: 初始化拖拽操作。
参数:
event{Event}: 原始鼠标/触摸事件relativeTo{Point | Element}: 参考点或元素prefix{string}: 事件前缀(如 'shape.move')options{Object}: 拖拽选项
选项:
cursor: 光标样式autoActivate: 是否自动激活data: 传递给拖拽上下文的数据
示例:
javascript
const dragging = diagram.get("dragging");
dragging.init(event, element, "shape.move", {
cursor: "move",
autoActivate: true,
data: { shape: element },
});拖拽生命周期
- {prefix}.init: 拖拽初始化
- {prefix}.start: 拖拽开始
- {prefix}.move: 拖拽移动过程
- {prefix}.hover: 悬停在元素上
- {prefix}.out: 离开元素
- {prefix}.end: 拖拽结束
- {prefix}.cancel: 拖拽取消
- {prefix}.cleanup: 清理
拖拽上下文
每个拖拽操作都有一个上下文对象,包含:
javascript
{
prefix: 'shape.move',
data: { ... }, // 自定义数据
delta: { x, y }, // 当前偏移量
hover: element, // 当前悬停元素
...
}使用场景
实现自定义拖拽
javascript
// 初始化拖拽
eventBus.on("element.mousedown", function (event) {
dragging.init(event.originalEvent, element, "custom.drag", {
cursor: "grab",
data: { element: element },
});
});
// 处理拖拽移动
eventBus.on("custom.drag.move", function (event) {
const ctx = event.context;
console.log("拖拽中:", ctx.delta);
});
// 处理拖拽结束
eventBus.on("custom.drag.end", function (event) {
const ctx = event.context;
console.log("拖拽结束");
});##相关模块
Move: 使用 Dragging 实现移动Resize: 使用 Dragging 实现调整大小Connect: 使用 Dragging 实现连接Create: 使用 Dragging 实现创建