vue项目中使用jsplumb总结

本文介绍了如何在Vue项目中集成并使用jsPlumb库来实现节点间的连线功能,包括安装步骤、全局引入、样式配置、事件绑定以及关键方法如添加、删除和重绘连线的操作。
摘要由CSDN通过智能技术生成

vue项目中使用jsplum总结
先介绍一下背景,最近项目中有个需求(各节点与节点之间的连线),网上搜刮了一波关于连线的开源库,发现jsplumb的文章应该是最多的,功能也比较丰富,最终就选择了jsplumb来实现项目需求。
下面开始我的vue+jsplumb踩坑之旅。

在线DOME预览

一、安装 jsplumb

1、vue 项目中安装 jsPlumb 模块

npm install jsplumb  --save

2、在main.js 中引入 jsPlumb(全局引入,也可以局部引入)

import jsPlumb from 'jsplumb'
Vue.prototype.$jsPlumb = jsPlumb.jsPlumb
二、使用jsplumb

nodeConnection.vue组件

// 初始化JSPlumb样式
    initJSPlumb() {
      this.jsPlumb = this.$jsPlumb.getInstance({
        Container: "efContainer", //容器id
        //  Endpoint:['Image', {
        //    src: 'static/images/def_endpoint.png',
        //  }] , // 端点的形状
        Anchor: [0.5, 1, 0, 1, 0, 50],
        Anchors: ["Right", "Left"], //连线的source和target 
        EndpointStyle: { radius: 6, fill: "#818FB4" }, //端点默认样式
        PaintStyle: { stroke: "#818FB4", strokeWidth: 1, fill: 'red' }, // 连线样式
        HoverPaintStyle: { stroke: "#498FFF" }, // 默认悬停样式
        // EndpointHoverStyle: {src: 'static/images/endpoint.png', },
        EndpointHoverStyle: { fill: "#498FFF" }, // 端点悬停样式
        ConnectionOverlays: [
          [
            "Arrow",
            {
              // 箭头
              location: 1,
              visible: false,
              paintStyle: {
                stroke: "#ccc",
                fill: "#ccc"
              }
            }
          ]
        ],
        Connector: ["Straight", { gap: 5 }], //要使用的默认连接器的类型:折线,流程等
        DrapOptions: { cursor: "crosshair", zIndex: 2000 },
        Scope: "jsPlumb_DefaultScope"
      });
      
    // 连接断开时触发
      this.jsPlumb.bind('connectionDetached', evt => {
      })

      // 连接建立时触发
      this.jsPlumb.bind("connection", evt => {
      });

      // 改变线的连接节点
      this.jsPlumb.bind("connectionMoved", evt => {
      });

      // 当链接建立前
      this.jsPlumb.bind("beforeDrop", evt => { 
      });
      // 连接断开前
      this.jsPlumb.bind("beforeDetach", evt => {
      });
    }
三、默认的参数配置(此处只列了部分参数配置,更多配置请移步官方文档)
{
  Anchor : "BottomCenter",//端点的定位点的位置声明(锚点):left,top,bottom等
  Anchors : [ null, null ],//多个锚点的位置声明
  ConnectionsDetachable   : true,//连接是否可以使用鼠标默认分离
  ConnectionOverlays  : [],//附加到每个连接的默认重叠
  Connector : "Bezier",//要使用的默认连接器的类型:折线,流程等
  Container : null,//设置父级的元素,一个容器
  DoNotThrowErrors  : false,//如果请求不存在的Anchor,Endpoint或Connector,是否会抛出
  DragOptions : { },//用于配置拖拽元素的参数
  DropOptions : { },//用于配置元素的drop行为的参数
  Endpoint : "Dot",//端点(锚点)的样式声明(Dot)
  Endpoints : [ null, null ],//多个端点的样式声明(Dot)
  EndpointOverlays : [ ],//端点的重叠
  EndpointStyle : { fill : "#456" },//端点的css样式声明
  EndpointStyles : [ null, null ],//同上
  EndpointHoverStyle : null,//鼠标经过样式
  EndpointHoverStyles : [ null, null ],//同上
  HoverPaintStyle : null,//鼠标经过线的样式
  LabelStyle : { color : "black" },//标签的默认样式。
  LogEnabled : false,//是否打开jsPlumb的内部日志记录
  Overlays : [ ],//重叠
  MaxConnections : 1,//最大连接数
  PaintStyle : { lineWidth : 8, stroke : "#456" },//连线样式
  ReattachConnections : false,//是否重新连接使用鼠标分离的线
  RenderMode : "svg",//默认渲染模式
  Scope : "jsPlumb_DefaultScope"//范围,标识
}
四、jsPlumb的相关方法
  • 添加连线
// 此处参数sourceId,targetId一般是从后台获取后再添加连线
const params={source: item.sourceId, target: item.targetId};
// 为自定义的jsPlumb设置,也可以不传入
const  connectOptions = {
   isSource: true,
   isTarget: true,
   // 动态锚点、提供了4个方向 Continuous、AutoDefault
   anchor: 'Continuous',
   // 设置连线上面的label样式
   labelStyle: {
     cssClass: 'flowLabel'
   },
  connectorStyle: {
     stroke: '#30BF78'
   },
}
this.jsPlumb.connect(params, connectOptions);
  • 删除连线
//  这个方法删除指定的节点和连线,传入的node为节点元素
this.jsPlumb.removeAllEndpoints(node)
// 这个方法删除所有连线,不需要传入参数 
this.jsPlumb.deleteEveryConnection();
// 这个方法删除所有节点,不需要传入参数
this.jsPlumb.deleteEveryEndpoint();
// 删除制定的连线,传入节点ID
this.jsPlumb.deleteConnectionsForElement('t001',{});
  • 重绘连线
// 重绘连线
this.jsPlumb.repaintEverything()
// 这里第二个参数的true,会使整个jsPlumb立即重绘。
this.jsPlumb.setSuspendDrawing(false,true);

最后附上一个在线DOME预览
组件编辑器

  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Vue是一种用于构建用户界面的渐进式 JavaScript 框架,而jsPlumb是一个用于在网页上创建可拖拽连接线的JavaScript库。结合VuejsPlumb可以实现动态生成可拖拽并且连接的元素的效果。 使用Vue2和jsPlumb插件来创建一个demo时,首先需要引入VuejsPlumb的相关文件。然后,创建一个Vue实例来管理demo应用的数据和行为。 在Vue模板,可以使用v-for指令和v-bind指令来动态渲染元素,使用v-on指令来绑定事件,以及使用jsPlumb提供的API来创建可拖拽并且连接的元素。 首先,在Vue的data定义要生成的元素的数据数组,每个元素包含位置、样式和唯一标识等属性。然后,在Vue的created生命周期钩子使用jsPlumb的makeSource方法将元素设置为可拖拽并且可以连接的源端点。 接着,在模板使用v-for指令遍历数据数组,动态渲染元素,并使用v-bind指令绑定元素的属性。同时,使用v-on指令绑定元素的拖拽事件。 在Vue的methods,可以定义一个鼠标拖拽的回调函数,该回调函数会根据拖拽的位置将元素的位置属性进行更新。还可以定义一个连接的回调函数,当连接两个元素时,会触发该回调函数,可以在其执行一些逻辑操作。 最后,在Vue的mounted生命周期钩子使用jsPlumb的makeTarget方法将元素设置为可拖拽并且可以连接的目标端点。 通过以上步骤,就可以创建一个基于Vue2和jsPlumb插件的demo,实现动态生成可拖拽并且连接的元素的效果。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值