jsPlumb的简单使用
- jsPlumb概述
jsPlumb是一个在dom元素之间绘制连接线的javascript框架,它使用svg技术绘制连接线。 - 基本概念
很明显,一个连线主要要解决的问题包括谁和谁连,在哪里连(连接点在哪里),连接点长啥样,如何画线等问题
1:Anchor,锚点,它是一个逻辑概念,解决连线的连接点位置问题。
2:Endpoint,端点,它是一个可视化的点,解决 连接点长啥样的问题
3:Connector,连线,解决如何画线的问题
4:Overlay,覆盖物,它主要为连接添加一些装饰物,不如标签文本,连接点的箭头。Anchor:
锚点的定义方式主要有下面几种
1:用数组来定义
[x位置,y位置,x方向,y方向]
[x位置,y位置,x方向,y方向,x像素偏移,y像素偏移]
位置的值在0~1之间
方向的值为0,1,-1
9个静态的值为:
Top TopRight
Right BottomRight
Bottom BottomLeft
Left TopLeft
Center
AutoDefault 包括Top, Right, Bottom, Left
需要注意的是,坐标使用第四象限的坐标
一个常用的组合是:
var defaultAnchors = ["Top", "Right", "Bottom", "Left", [0.25, 0, 0, -1], [0.75, 0, 0, -1], [0.25, 1, 0, 1], [0.75, 1, 0, 1]
, [0, 0.25, 0, -1], [0, 0.75, 0, -1], [1, 0.25, 0, 1], [1, 0.75, 0, 1]];
2:几何图形的周边
Circle Ellipse Triangle Diamond Rectangle Square
anchor:[{ shape:"Triangle", anchorCount:150, rotation:25 } ]
3:连续
anchor:["Continuous", { faces:[ "top", "left" ] } ]Endpoint:
jsPlumb提供了四种类型的端点,
Dot,Rectangle,
Blank,使用失败了。
Image,使用失败了。Connectors
jsPlumb提供了四种类型的连线,
Bezier,StateMachine,Flowchart,StraightOverlay
jsPlumb提供了3种类型的覆盖物,
Arrow:箭头
Label:标签
Custom:自定义的html元素
ConnectionOverlays: [
["Arrow", {
location: 1,
//foldback: 1,
foldback: 0.618, ///0.618: 普通箭头,1:平底箭头,2:钻石箭头
visible: true,
id: "arrow"
}],
["Label", { location: 0.5,
cssClass: "endpointTargetLabel",
visible: true,
id: "label" }]
] - 几个需要注意的地方:
1:所有的子元素在一个父容器中,并且子元素都要使用绝对布局
position: absolute;
2:端点可以通过样式隐藏,直接使用"Blank"报错了。
3:性能,在多个连接的时候,需要使用批处理模式来绘制。
sintoonUx.jsPlumbInstance.setSuspendDrawing(true)
sintoonUx.jsPlumbInstance.setSuspendDrawing(false, true);
4:设置可拖拽
sintoonUx.jsPlumbInstance.draggable(btnDoms); - 使用范例
drawConnectLine: function () {
var sintoonUx = this;
/// 定义锚点的位置
var defaultAnchors = ["Top", "Right", "Bottom", "Left", [0.25, 0, 0, -1], [0.75, 0, 0, -1], [0.25, 1, 0, 1], [0.75, 1, 0, 1]
, [0, 0.25, 0, -1], [0, 0.75, 0, -1], [1, 0.25, 0, 1], [1, 0.75, 0, 1]];
/// 创建实例,配置默认的绘制属性,建立通用绘图方式等
sintoonUx.jsPlumbInstance = jsPlumb.getInstance({
PaintStyle: {
lineWidth: 2,
strokeStyle: "blue",
outlineColor: "blue",
dashstyle: "4 2",
outlineWidth: 1
},
// Connector: ["Bezier", { curviness: 30 }],
// Connector: ["StateMachine"],
// Connector: ["Flowchart", { stub: [40, 60], gap: 10, cornerRadius: 5, alwaysRespectStubs: true }],
Connector: ["Straight", { stub: [20, 50], gap: 0 }], Endpoint: ["Dot", { radius: 5, cssClass: "displaynone" }],/// 通过样式来隐藏锚点
//Endpoint: ["Image ", { src: "http://rmadyq.sintoon.cn/Content/16Icons/arrow_right.png" }],/// 通过样式来隐藏锚点
// Endpoint: ["Blank", "Blank"], 失败报错了,
EndpointStyle: { fillStyle: "#567567" },
Anchor: [defaultAnchors],
// Anchor: ["Perimeter", { shape: "Triangle" }],
Container: sintoonUx.flowchartContainerId,
DragOptions: { cursor: 'pointer', zIndex: 2000 },
ConnectionOverlays: [
["Arrow", {
location: 1,
//foldback: 1,
foldback: 0.618,
visible: true,
id: "arrow"
}],
["Label", { location: 0.5, label: "zhu", cssClass: "endpointTargetLabel", visible: true, id: "label" }]
]
}); /// 绘制标签
sintoonUx.jsPlumbInstance.bind("connection",
function (connInfo, originalEvent) {
var connection = connInfo.connection;
var labelText = connection.sourceId.substring(0, 15) + "-" + connection.targetId.substring(0, 15);
labelText = Ext.String.format("{0}---{1}", Ext.getCmp(connection.sourceId).flowStage,
Ext.getCmp(connection.targetId).flowStage);
connection.getOverlay("label").setLabel(labelText);
}); /// 批处理绘制
sintoonUx.jsPlumbInstance.setSuspendDrawing(true);
var searchPat = Ext.String.format("#{0} .btnDraggable", sintoonUx.flowchartContainerId);
var btnDoms = sintoonUx.jsPlumbInstance.getSelector(searchPat); /// 设置dom元素的可拖拽性
sintoonUx.jsPlumbInstance.draggable(btnDoms); /// 建立dom元素之间的连接,绘制连接线,锚点,覆盖物等
for (var i = 0; i < sintoonUx.btnConfigs.length - 1; i++) {
sintoonUx.jsPlumbInstance.connect({ reattach: true, source: sintoonUx.btnConfigs[i].btnId, target: sintoonUx.btnConfigs[i + 1].btnId });
} /// 强制绘制整个界面
sintoonUx.jsPlumbInstance.setSuspendDrawing(false, true);
}
jsPlumb的简单使用的更多相关文章
- 使用 jsPlumb 绘制拓扑图 —— 异步加载与绘制的实现
本文实现的方法可以边异步加载数据边绘制拓扑图. 有若干点需要说明一下: 1. 一次性获取所有数据并绘制拓扑图, 请参见文章: <使用 JsPlumb 绘制拓扑图的通用方法> ; 本文实现 ...
- 使用jsPlumb制作流程图设计器
jsPlumb是一个比较强大的绘图组件,它提供了一种方法,主要用于连接网页上的元素.在现代浏览器中,它使用SVG或者Canvas技术,而对于IE8以下(含IE8)的古董浏览器,则使用VML技术. 项目 ...
- jsPlumb插件做一个模仿viso的可拖拉流程图
前言 这是我第一次写博客,心情还是有点小小的激动!这次主要分享的是用jsPlumb,做一个可以给用户自定义拖拉的流程图,并且可以序列化保存在服务器端. 我在这次的实现上面做得比较粗糙,还有分享我在做j ...
- jsPlumb开发入门教程(实现html5拖拽连线)
jsPlumb是一个强大的JavaScript连线库,它可以将html中的元素用箭头.曲线.直线等连接起来,适用于开发Web上的图表.建模工具等.它同时支持jQuery+jQuery UI.MooTo ...
- jsPlumb之流程图项目总结及实例
在使用jsPlumb过程中,所遇到的问题,以及解决方案,文中引用了<数据结构与算法JavaScript描述>的相关图片和一部分代码.截图是有点多,有时比较懒,没有太多的时间去详细的编辑. ...
- jsplumb 中文教程
https://wdd.js.org/jsplumb-chinese-tutorial/#/ 1. jsplumb 中文基础教程 后续更新会在仓库:https://github.com/wangdua ...
- 前端流程图jsplumb学习笔记
1.这篇博客很好,另外两个是官网文档 http://www.cnblogs.com/leomYili/p/6346526.html https://jsplumbtoolkit.com/communi ...
- [转]jsPlumb插件做一个模仿viso的可拖拉流程图
原贴:https://www.cnblogs.com/sggx/p/3836432.html 前言 这是我第一次写博客,心情还是有点小小的激动!这次主要分享的是用jsPlumb,做一个可以给用户自定义 ...
- jsPlumb学习笔记
这就是一个给元素画连接线的工具. <!DOCTYPE html> <html> <head> <title>jsPlumb</title> ...
随机推荐
- SpringMVC中使用Json传数据
在web项目中使用Json进行数据的传输是非常常见且有用的,在这里介绍下在SpringMVC中使用Json传数据的一种方法,在我的使用中,主要包括下面四个部分(我个人喜好使用maven这类型工具进行项 ...
- 可扩展Web架构与分布式系统(转)
1.1. web分布式系统的设计原则 搭建和运营一个可伸缩的web站点或者应用程序意味着什么?在原始层面上这仅仅是用户通过互联网连接到远程资源-使系统变得可伸缩的部分是将资源.或者访问的资源,分布于多 ...
- Java lamda Stream
Intermediate:一个流可以后面跟随零个或多个 intermediate 操作.其目的主要是打开流,做出某种程度的数据映射/过滤,然后返回一个新的流,交给下一个操作使用.这类操作都是惰性化的( ...
- Git使用培训
1.VS“扩展和更新”菜单,NuGet 2.通过“扩展和更新”,联机搜索git,安装“Git Extensions”和“Git Source Control Provider” 3.通过Git命令配置 ...
- VS里统计整个解决方案代码行数的方法
VS里统计整个解决方案代码行数,在查找里输入正则表达式:b*[^:b#/]+.*$.如下图所示: 结果如下图所示:
- Emacs使用projectile-rails 插件注意事项
插件地址 https://github.com/asok/projectile-rails 我自己使用rbenv这个ruby版本控制工具来,管理下载ruby,但是他不是全局安装ruby之类的gem,如 ...
- SQL: ROW_NUMBER
- DbEntry.Net.v3.5 快速教程
1.DbEntry 介绍 EN&Download——[DbEntry Framework下载][Tutorials For Version 3.5] CN&Summary:总体特性的介 ...
- jenkins中submodule的使用
尝试过各种插件配置都不行. 最后只好通过命令来更新Submodule了. 首先把Git更新到最新,为什么要更新等会儿再说. 项目里的Submodule要配置好,这是基本的. (检查是否配置好的方法: ...
- Rhino+envjs-1.2.js 在java运行网站js 工具类
java爬虫遇到个页面加密的东西,找了些资料学习学习 做了个java运行js的工具类,希望对大家有用,其中用到client(获取js)可以自行换成自己的client.主要是用了 Rhino就是Java ...