官网:https://jsplumbtoolkit.com

GitHub:https://github.com/sporritt/jsplumb/

初始化

jsPlumb只有等到DOM初始化完成之后才能使用,因此我们在以下代码中调用jsPlumb方法
jsPlumb.ready(function() {
...
// some code
...
});

首先,我们给jsPlumb设一些默认值,然后声明一个exampleDropOptions变量。

jsPlumb.importDefaults({
    DragOptions : { cursor: 'pointer'},	//拖动时鼠标停留在该元素上显示指针,通过css控制
    PaintStyle : { strokeStyle:'#666' },//元素的默认颜色
    EndpointStyle : { width:20, height:16, strokeStyle:'#666' },//连接点的默认颜色
    Endpoint : "Rectangle",//连接点的默认形状
    Anchors : ["TopCenter"]//连接点的默认位置
});
var exampleDropOptions = {
    hoverClass:"dropHover",//释放时指定鼠标停留在该元素上使用的css class
    activeClass:"dragActive"//可拖动到的元素使用的css class
};

添加jsPlumb连接点

然后声明两种类型的连接点。
var color1 = "#316b31";
var exampleEndpoint1 = {
	endpoint:["Dot", { radius:11 }],//设置连接点的形状为圆形
	paintStyle:{ fillStyle:color1 },//设置连接点的颜色
	isSource:true,	//是否可以拖动(作为连线起点)
	scope:"green dot",//连接点的标识符,只有标识符相同的连接点才能连接
	connectorStyle:{ strokeStyle:color1, lineWidth:6 },//连线颜色、粗细
	connector: ["Bezier", { curviness:63 } ],//设置连线为贝塞尔曲线
	maxConnections:1,//设置连接点最多可以连接几条线
	isTarget:true,	//是否可以放置(作为连线终点)
	dropOptions : exampleDropOptions//设置放置相关的css
};

var color2 = "rgba(229,219,61,0.5)";
var exampleEndpoint2 = {
	endpoint:"Rectangle",	//设置连接点的形状为矩形
	anchor:"BottomLeft",	//设置连接点的位置,左下角
	paintStyle:{ fillStyle:color2, opacity:0.5 },	//设置连接点的颜色、透明度
	isSource:true,	//同上
	scope:'yellow dot',	//同上
	connectorStyle:{ strokeStyle:color2, lineWidth:4},//同上
	connector : "Straight",	//设置连线为直线
	isTarget:true,	//同上
	maxConnections:3,//同上
	dropOptions : exampleDropOptions,//同上
	beforeDetach:function(conn) {	//绑定一个函数,在连线前弹出确认框
		return confirm("Detach connection?");
	},
	onMaxConnections:function(info) {//绑定一个函数,当到达最大连接个数时弹出提示框
		alert("Cannot drop connection " + info.connection.id + " : maxConnections has been reached on Endpoint " + info.endpoint.id);
	}
};

将连接点绑定到html元素上

var anchors = [[1, 0.2, 1, 0], [0.8, 1, 0, 1], [0, 0.8, -1, 0], [0.2, 0, 0, -1] ],
	maxConnectionsCallback = function(info) {
		alert("Cannot drop connection " + info.connection.id + " : maxConnections has been reached on Endpoint " + info.endpoint.id);
	};

var e1 = jsPlumb.addEndpoint("state2", { anchor:"LeftMiddle" }, exampleEndpoint1);//将exampleEndpoint1类型的点绑定到id为state2的元素上
e1.bind("maxConnections", maxConnectionsCallback);//也可以在加到元素上之后绑定函数

jsPlumb.addEndpoint("state1", exampleEndpoint1);//将exampleEndpoint1类型的点绑定到id为state1的元素上
jsPlumb.addEndpoint("state3", exampleEndpoint2);//将exampleEndpoint2类型的点绑定到id为state3的元素上
jsPlumb.addEndpoint("state1", {anchor:anchors}, exampleEndpoint2);//将exampleEndpoint2类型的点绑定到id为state1的元素上,指定活动连接点
需要注意的是连接点分为动态连接点和静态连接点。当指定一个数组作为连接点时,该连接点为动态连接点,连线时会自动选择最近的连接点连接;当指定一个坐标或者固定位置(TopRight、RightMiddle等)作为连接点时,该连接点为静态连接点,不管怎么连线都不会移动。

jsPlumb的更多相关文章

  1. jsPlumb的简单使用

    jsPlumb概述jsPlumb是一个在dom元素之间绘制连接线的javascript框架,它使用svg技术绘制连接线. 基本概念很明显,一个连线主要要解决的问题包括谁和谁连,在哪里连(连接点在哪里) ...

  2. 使用 jsPlumb 绘制拓扑图 —— 异步加载与绘制的实现

    本文实现的方法可以边异步加载数据边绘制拓扑图. 有若干点需要说明一下: 1.  一次性获取所有数据并绘制拓扑图, 请参见文章: <使用 JsPlumb 绘制拓扑图的通用方法> ; 本文实现 ...

  3. 使用jsPlumb制作流程图设计器

    jsPlumb是一个比较强大的绘图组件,它提供了一种方法,主要用于连接网页上的元素.在现代浏览器中,它使用SVG或者Canvas技术,而对于IE8以下(含IE8)的古董浏览器,则使用VML技术. 项目 ...

  4. jsPlumb插件做一个模仿viso的可拖拉流程图

    前言 这是我第一次写博客,心情还是有点小小的激动!这次主要分享的是用jsPlumb,做一个可以给用户自定义拖拉的流程图,并且可以序列化保存在服务器端. 我在这次的实现上面做得比较粗糙,还有分享我在做j ...

  5. jsPlumb 学习笔记

    介绍 使用svg完成画图,四个概念: anchor: endpoint在的位置,可通过name访问 endpoint:connection的一端节点,通过addPoint makeSource, co ...

  6. 使用 jsPlumb 绘制拓扑图 —— 异步载入与绘制的实现

    本文实现的方法能够边异步载入数据边绘制拓扑图. 有若干点须要说明一下: 1.  一次性获取全部数据并绘制拓扑图. 请參见文章: <使用 JsPlumb 绘制拓扑图的通用方法> ; 本文实现 ...

  7. 使用JsPlumb绘制拓扑图的通用方法

    转自:http://www.it165.net/pro/html/201311/7616.html 使用JsPlumb绘制拓扑图的通用方法 一. 实现目标 绘制拓扑图, 实际上是个数据结构和算法的问题 ...

  8. jsPlumb开发入门教程(实现html5拖拽连线)

    jsPlumb是一个强大的JavaScript连线库,它可以将html中的元素用箭头.曲线.直线等连接起来,适用于开发Web上的图表.建模工具等.它同时支持jQuery+jQuery UI.MooTo ...

  9. jsPlumb之流程图项目总结及实例

    在使用jsPlumb过程中,所遇到的问题,以及解决方案,文中引用了<数据结构与算法JavaScript描述>的相关图片和一部分代码.截图是有点多,有时比较懒,没有太多的时间去详细的编辑. ...

随机推荐

  1. Draw a Border around any C# Winform Control

    public class MyGroupBox : GroupBox { protected override void OnPaint(PaintEventArgs e) { base.OnPain ...

  2. 为什么你应该试试用Sublog写博客

    HI 这篇文章发布后,收到了一些反馈,在不同的阅读媒体上(浏览器,RSS,evernote)等,会有样式兼容问题,特别是之前的代码显示行号的实现方式,使用浮动code块,兼容问题比较严重,所以做了一个 ...

  3. Java 控制反转和依赖注入模式【翻译】【整理】

    Inversion of Control Containers and the Dependency Injection pattern --Martin Fowler 本文内容 Component ...

  4. FS拓展设置

    一.集群测试说明: 1.该测试的主要目的是:让两个注册在不同FS Server上的账号彼此双方通话. 2.测试工具:eyeBeam .LinPhone 3.FS架构图: 上图中两台FS的分机状况如下: ...

  5. Vs 2013 单步调试 .net framework 中遇到的问题

    为了可以看清.net framework 的的内部机制,进行单步实际是不错的选择啊,   其它的更多设置可以看其它文章,我这里主要讲问题.     然后就会加载PDB,然后就可以单步进入了. 但是 , ...

  6. unity, 由unity5.2.1升级到5.4.2物体变亮解法

    由unity5.2.1升级到5.4.2之后,使用standard shader的物体会变亮. 原因如图: 框中两项是5.4.2多出来的,如果把specular Highlights的勾选去掉,就跟以前 ...

  7. 位查询【 openjudge数据结构课程练习题】

    /*======================================================= 位查询 http://dsalgo.openjudge.cn/linearlists ...

  8. css之padding,marging

    padding:内边距,所有浏览器都支持,不允许使用负值 继承内部格式生成了10px的边距. 属性: auto:浏览器计算机内边距. length:规定以具体单位计的内边距值,比如像素.厘米等.默认值 ...

  9. 数据结构线性表(js实现)

    最近在复习数据结构的过程中,发现基本上数据结构都是用C来实现的,自己之前学习的时候也是用C去写的,由于目前对js更为熟悉一些,所以这里选择使用js去实现其中的某些算法和结构.实际上算法和语言关系不大, ...

  10. Jquery 使用小结

    JQuery API中文档地址:http://www.hemin.cn/jq/index.html JQuery 中文社区:http://www.jquery.org.cn/ 1.siblings() ...