jsPlumb 是一个用于创建交互式可视化连接图的 JavaScript 库,特别适合以下场景:
工作流系统:
可视化编排工具:
流程图设计:
拖放式用户界面(UI)设计器:
表单生成器和字段映射:
连接两个或多个元素:
支持多种锚点和端点样式:
动态拖动和交互:
连接线覆盖物:
事件处理:
分组和容器支持:
丰富的插件支持:
以下是一个具体的 jsPlumb 使用示例,展示如何实现简单的节点连接功能,用户可以拖动节点,并且节点之间保持连接。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>jsPlumb Example</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jsPlumb/2.15.6/js/jsplumb.min.js"></script>
<style>
.window {
width: 100px;
height: 100px;
border: 1px solid black;
text-align: center;
line-height: 100px;
position: absolute;
}
#window1 { left: 100px; top: 100px; }
#window2 { left: 300px; top: 300px; }
</style>
</head>
<body>
<div id="window1" class="window">Node 1</div>
<div id="window2" class="window">Node 2</div>
<script>
jsPlumb.ready(function() {
const instance = jsPlumb.getInstance({
Connector: ["Straight"], // 设置连接线为直线
PaintStyle: { strokeWidth: 2, stroke: "#000" }, // 设置连接线样式
Endpoint: ["Dot", { radius: 5 }], // 设置连接点为圆形
EndpointStyle: { fill: "#567" }, // 设置端点样式
Anchors: ["Right", "Left"], // 设置连接点在右边和左边
});
// 定义可以拖动的节点
instance.draggable("window1");
instance.draggable("window2");
// 连接两个元素
instance.connect({
source: "window1", // 源节点
target: "window2", // 目标节点
overlays: [
["Arrow", { width: 10, length: 10, location: 1 }], // 在连接线的末端添加箭头
]
});
// 添加事件监听,点击连接线时弹出提示
instance.bind("click", function(conn) {
alert("Clicked on connection from " + conn.sourceId + " to " + conn.targetId);
});
});
</script>
</body>
</html>
window1
和 window2
是两个可以拖动的 DOM 元素。通过 instance.connect
方法,我们将它们连接起来。window1
和 window2
,jsPlumb 会自动更新连接线的位置。