jsPlumb的简单使用

  1. jsPlumb概述
    jsPlumb是一个在dom元素之间绘制连接线的javascript框架,它使用svg技术绘制连接线。
  2. 基本概念
    很明显,一个连线主要要解决的问题包括谁和谁连,在哪里连(连接点在哪里),连接点长啥样,如何画线等问题
    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,Straight

    Overlay
    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" }]
    ]

  3. 几个需要注意的地方:
    1:所有的子元素在一个父容器中,并且子元素都要使用绝对布局
    position: absolute;
    2:端点可以通过样式隐藏,直接使用"Blank"报错了。
    3:性能,在多个连接的时候,需要使用批处理模式来绘制。
    sintoonUx.jsPlumbInstance.setSuspendDrawing(true)
    sintoonUx.jsPlumbInstance.setSuspendDrawing(false, true);
    4:设置可拖拽
    sintoonUx.jsPlumbInstance.draggable(btnDoms);
  4. 使用范例

        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);
        }
    

      

时间: 2024-10-09 10:55:53

jsPlumb的简单使用的相关文章

JsPlumb简单样例

JsPlumb简单样例: <!DOCTYPE html> <html> <head>     <script src="jquery-1.9.0.js"></script>     <script src="jquery-ui-1.9.2-min.js"></script>     <script src="jquery.jsPlumb-1.4.0-all.js&qu

前端流程图jsplumb学习笔记

1.这篇博客很好,另外两个是官网文档 http://www.cnblogs.com/leomYili/p/6346526.html https://jsplumbtoolkit.com/community/apidocs/classes/Connector.html https://jsplumbtoolkit.com/community/doc/connections.html#draganddrop 2.Jsplump流程图画虚线用"dashstyle": "2 4&qu

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

本文实现的方法可以边异步加载数据边绘制拓扑图. 有若干点需要说明一下: 1.  一次性获取所有数据并绘制拓扑图, 请参见文章: <使用 JsPlumb 绘制拓扑图的通用方法> ; 本文实现的最终显示效果与之类似, 所使用的基本方法与之类似. 2.  在此次实现中, 可以一边异步加载数据一边绘制拓扑图, 是动态可扩展的: 3.  所有影响节点位置.布局的配置均放置在最前面, 便于修改, 避免在代码中穿梭, 浪费时间: 4.  布局算法比之前的实现更加完善: 5.  此实现由于与业务逻辑绑得比较紧

JS组件系列——JsPlumb连线及相关效果详解

前言:之前项目里面用到了Web里面的拖拽流程图的技术JsPlumb,其实真不算难,不过项目里面用HTML做的一些类似flash的效果,感觉还不错,在此分享下. Jsplumb官网:https://jsplumbtoolkit.com GitHub:https://github.com/sporritt/jsplumb/ 一.效果图展示 1.从左边拖动元素到中间区域,然后连线 2.连线类型可以自定义:这里定义为直线.折线.曲线.实际项目中根据业务我们定义为分装线.分装支线.总装线等 3.鼠标拖动区

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

jsPlumb是一个强大的JavaScript连线库,它可以将html中的元素用箭头.曲线.直线等连接起来,适用于开发Web上的图表.建模工具等.它同时支持jQuery+jQuery UI.MooTools和YUI3这三个JavaScript框架,十分强大.大家可以在官网的Demo中看看它的功能.目前可用的jsPlumb中文资料很少,希望这篇教程可以帮助大家更快的了解jsPlumb.出于篇幅考虑,本教程将以jQuery为例介绍jsPlumb. 浏览器兼容性 在使用jsPlumb之前,大家需要先了

jsPlumb学习笔记

自以为会了D3就可以无敌于可视化了,不过项目中却要求用jsPlumb.在我看来,这就是一个给元素画连接线的工具. <!DOCTYPE html> <html> <head> <title>jsPlumb</title> <style> .item{ width:100px; height:50px; border:3px solid green; position: absolute; } .item1{ left:400px; to

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

前言 这是我第一次写博客,心情还是有点小小的激动!这次主要分享的是用jsPlumb,做一个可以给用户自定义拖拉的流程图,并且可以序列化保存在服务器端. 我在这次的实现上面做得比较粗糙,还有分享我在做jsPlumb流程图遇到的一些问题. 准备工作 制作流程图用到的相关的脚本: 1 <script src="<%= ResolveUrl("~/resources/jquery/jquery-1.11.1.min.js")%>" type="t

基于jsplumb的流程图展示

背景需求 目前系统中对于工艺流程的展示是纯粹的瀑布式流程,如图所示: 导致的问题是1)没有办法展示复杂的工艺关联 2)在展现上比较简陋不符合客户的审美. 基于以上问题,决定基于jsplumb开发用于复杂工艺流程展示的控件,预计效果图如下: 技术介绍 jsplumb是一款有条件开源的javascript类库,基于SVG提供页面元素的连接.之所以说有条件开源,是因为jsplumb存在两个分支: 1) Toolkit Edition商用版,基于社区版本进行封装提供更丰富的API支持 2) Commun

C# Ping 简单使用

编程过程中,有时候需要判断主机是否在线,最简单的方法就是使用Windows的Ping命令看看能否ping通.看到网上很多文章,说用C#去调用windows的ping.exe,然后解析返回的字符串.我觉得这种方式太麻烦了,就做一下简单判断,不想弄那么麻烦. 查了一下,C#专门提供了一个Ping类,与Windows下的ping命令类似: 命令空间: System.Net.NetworkInformation; 使用方法: bool online = false; //是否在线 Ping ping =