最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 基于jsplumb+vue的流程图绘制

    正文概述 掘金(鬼眼望天)   2021-01-27   1688

    话不多说,先上效果图:

    基于jsplumb+vue的流程图绘制

    现支持的功能: 

    • 节点的拖拽(1. 将左侧节点拖入画布,添加节点;2. 在画布拖拽移动节点)
    • 在节点之间添加连线
    • 画布支持缩放 (滚轮缩放,快捷键+,-缩放)
    • 画布的整体平移
    • 节点,连线的删除 (节点右键删除,连线双击删除)
    • 节点编辑 (双击节点,编辑节点名称)
    • 节点对齐辅助线

    后续支持功能:

    • 框选功能,按下Ctrl时,可以进行点选
    • 添加泳道功能 (泳道可调节大小)

    该项目来源于公司内部的一个项目,有流程图绘制的需求。在此之前,也有做过一次相似的需求,用的是G6-editor , 但由于G6官方文档写的太粗糙了,而且高版本又不高源,整个过程痛苦不堪,大部分功能都是自己一点一点试出来的。所有第二次接这种需求,在一番分析对比之后,果断放弃了G6,选择了jsplumb。总结下来,jsplumb有以下优点:

    1.  免费,并根据MIT许可证提供。可以直接从jsPlumb github网站下载框架, 也可以通过npm安装。(jsplumb官网提供了免费和收费两个版本,但免费版已经可以满足我的需求)
    2. 节点由自己进行绘制,样式自言可控,灵活度高。 想怎么画,怎么画
    3. 图表项目和连接的参数精细可控

    前期准备:

    1. 安装依赖

      npm install jsplumb --save npm install panzoom --save

    在对应的页面引入: 

    import { jsPlumb } from "jsplumb"
    import panzoom from "panzoom"
    

    其中,panzoom可以实现画布的缩放,平移功能。

      2. 初始化画布

    fixNodesPosition 中, 通过节点位置的计算,使提每次加载完数据时,都能让流程图整体居中显示。要等到所有节点渲染完成后,才能实例化jsplumb, 不然会出现找不到节点的问题。

    mounted() {    this.jsPlumb = jsPlumb.getInstance();    this.fixNodesPosition()    this.$nextTick(() => {      this.init();    });  }
    
    
    init() {    this.jsPlumb.ready(() => {      // 导入默认配置      this.jsPlumb.importDefaults(this.jsplumbSetting);      //完成连线前的校验      this.jsPlumb.bind("beforeDrop", evt => {        let res = () => { } //此处可以添加是否创建连接的校验, 返回 false 则不添加;         return res      })      // 连线创建成功后,维护本地数据      this.jsPlumb.bind("connection", evt => {        this.addLine(evt)      });      //连线双击删除事件      this.jsPlumb.bind("dblclick",(conn, originalEvent) => {        this.confirmDelLine(conn)      })      //断开连线后,维护本地数据      this.jsPlumb.bind("connectionDetached", evt => {        this.deleLine(evt)      })      this.loadEasyFlow();      // 会使整个jsPlumb立即重绘。      this.jsPlumb.setSuspendDrawing(false, true);    });    this.initPanZoom();  },
    

    初始化过程中,可以对连线的创建,删除等动作添加校验事件。

    jsplumbSetting为jsplumb的一些基础配置:

    jsplumbSetting = {  grid: [10, 10],  //节点移动时的最小距离  // 动态锚点、位置自适应  Anchors: [    "TopCenter",    "RightMiddle",    "BottomCenter",    "LeftMiddle"  ],  Container: "flow",  //画布容器id  // 连线的样式 StateMachine、Flowchart,有四种默认类型:Bezier(贝塞尔曲线),Straight(直线),Flowchart(流程图),State machine(状态机)  Connector: ["Flowchart", { cornerRadius: 5, alwaysRespectStubs: true, stub: 5 }],  // 鼠标不能拖动删除线  ConnectionsDetachable: false,  // 删除线的时候节点不删除  DeleteEndpointsOnDetach: false,  // 连线的端点  // Endpoint: ["Dot", {radius: 5}],  Endpoint: [    "Rectangle",    {      height: 10,      width: 10    }  ],  // 线端点的样式  EndpointStyle: {    fill: "rgba(255,255,255,0)",    outlineWidth: 1  },  LogEnabled: false, //是否打开jsPlumb的内部日志记录  // 绘制线  PaintStyle: {    stroke: "#409eff",    strokeWidth: 2  },  HoverPaintStyle: { stroke: "#ff00cc", strokeWidth: 2},  // 绘制箭头  Overlays: [    [      "Arrow",      {        width: 8,        length: 8,        location: 1      }    ]  ],  RenderMode: "svg"}
    

    项目git地址:github.com/Code-RoadFl…

    参考文档:  github.com/wangduandua…

                       jsplumbtoolkit.com


    起源地下载网 » 基于jsplumb+vue的流程图绘制

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元