首页 > 其他分享 >七、使用jsPlumb实现流程图功能--Connection事件和拦截器

七、使用jsPlumb实现流程图功能--Connection事件和拦截器

时间:2024-03-31 20:00:57浏览次数:37  
标签:拦截器 -- Connection jsPlumb CONNECTION INTERCEPT BEFORE

在一个交互式的流程图配置中,连线可能是最高频的操作。jsPlumb也提供了相对应的事件和拦截器可以让开发人员做一些符合需求的功能。

一、Connection事件

Connection事件是在行为发生之后的一个通知,Connection常用的一些事件有:

  • EVENT_CONNECTION:连线创建之后触发的事件。
  • EVENT_CONNECTION_CLICK:单击线条会触发的事件。
  • EVENT_CONNECTION_DBL_CLICK:双击线条会触发的事件。
  • EVENT_CONNECTION_DETACHED:线条与锚点脱离后触发的事件。
  • EVENT_CONNECTION_MOVED:线条移动触发的事件。
  • EVENT_CONNECTION_MOUSEOVER:鼠标在线条内移动时触发的事件。
  • EVENT_CONNECTION_MOUSEOUT:鼠标离开线条时触发的事件。
    绑定事件可以通过全局绑定,或者通过一个Connection实例绑定在某一条连线上:
import {
    newInstance,
    BrowserJsPlumbInstance,
    EVENT_CONNECTION,
    EVENT_CONNECTION_CLICK,
    Connection,
} from '@jsplumb/browser-ui';

onMounted(() => {
    jsPlumb.value = newInstance({
         // 参数省略.....
    });

    jsPlumb.value.bind(EVENT_CONNECTION, (params: ConnectionEstablishedParams) => {
        console.log("EVENT_CONNECTION", params);
    });
    jsPlumb.value.bind(EVENT_CONNECTION_CLICK, (connection: Connection) => {
        console.log("EVENT_CONNECTION_CLICK", connection);
    });
    // ...等等

});

这些事件的含义都很清晰,可以绑定事件后使用console.log打印来确认事件的触发以及参数内容。还有更多的事件,可以参考(官方文档)[https://docs.jsplumbtoolkit.com/community/6.x/lib/events]中完整的事件列表

如果线条配置了outlineWidth属性,那么需要留意的就是鼠标从outline区域移入线条时,也会触发一次MOUSEOUT事件,从outline区域移到外部时也会触发MOUSEOUT事件

二、Connection拦截器

jsPlumb一共提供了4个Connection拦截器,这4个拦截器都有返回值,返回值严格为Boolean类型。如果返回false,则可以阻止行为的继续进行:

  • INTERCEPT_BEFORE_DROP:拖拽连线松开鼠标时会触发。
  • INTERCEPT_BEFORE_DETACH:线条与锚点脱离时会触发,无论是通过鼠标拖拽还是通过代码的形式。
  • INTERCEPT_BEFORE_START_DETACH:拖拽线条,线条与锚点脱离时会触发。
  • INTERCEPT_BEFORE_DRAG:从一个锚点开始拖拽连线时会触发

官方文档中的一些拦截器的常量名以及参数对象名的文案目前是错误的,不知道后续会不会修改

拦截器中就可以在行为完成之前执行一些业务逻辑,例如INTERCEPT_BEFORE_DROP拦截器中,可以判断是否满足某些条件或某种规则,如果不满足可以返回false从而使这次连线失败。

import {
    newInstance,
    BrowserJsPlumbInstance,
    Connection,
    BeforeDropParams,
    BeforeDragParams,
    BeforeStartConnectionDetachParams,
    INTERCEPT_BEFORE_START_DETACH,
    INTERCEPT_BEFORE_DRAG,
    INTERCEPT_BEFORE_DETACH,
    INTERCEPT_BEFORE_DROP,
    BeforeDragParams,
} from '@jsplumb/browser-ui';

    const jsPlumb = newInstance({
         // 参数省略.....
    })

    jsPlumb.value.bind(INTERCEPT_BEFORE_DROP, (params: BeforeDropParams) => {
        console.log('before drop interceptor', params);
    });

    jsPlumb.value.bind(INTERCEPT_BEFORE_DETACH, (params: Connection) => {
        console.log('before detach interceptor', params);
    });
    jsPlumb.value.bind(
        INTERCEPT_BEFORE_DRAG,
        (params: BeforeDragParams<Element>) => {
            console.log('before drag interceptor', params);
        }
    );
    jsPlumb.value.bind(
        INTERCEPT_BEFORE_START_DETACH,
        (params: BeforeStartConnectionDetachParams<Element>) => {
            console.log('before start connection detach interceptor', params);
        }
    );

然而这里比较难受的就是拦截器的返回值只能是Boolean类型,也就意味着如果想在拦截器中使用axios的话或其他异步操作的话就很难。

三、总结

这次的代码仅仅只是演示了如何去使用事件与拦截器,而且事件与拦截器的含义清晰,也就没有写示例代码去演示效果。jsPlumb除了Connection的事件,其他元素也有相应的事件,实际使用的不多因此就没有说明,这方面内容可以看官方文档。
到目前为止jsPlumb的大部份的用法都已经介绍完毕,接下来计划用最后一篇文章讲述如何实现简单的流程图配置。

标签:拦截器,--,Connection,jsPlumb,CONNECTION,INTERCEPT,BEFORE
From: https://www.cnblogs.com/bencakes/p/18107172

相关文章

  • ubuntu使用-ubuntu23.10中使QEMU的虚拟机与外部网络通信
    ubuntu使用-ubuntu23.10中使QEMU的虚拟机与外部网络通信ubuntuqemu银河麒麟参考了文档/网络/NAT和qemuaarch64虚拟机创建好后,使用NAT连接网络两个网页。一、概述要配置NAT网络,首先创建一个脚本/etc/qemu-ifup,这个脚本的作用是创建一个与任何物理端口都无关的网桥。给这个网......
  • Excel数据库模板导出
    有时候我们不仅需要将excel文件中的数据导入到数据库,同时我们还需要将数据库中的数据或者表字段导出,接下来我们就具体看看如何进行数据库模板导出~我记得需要导入easypoi的相关注解(如果没记错的话):<dependency><groupId>cn.afterturn</groupId><a......
  • 卷积篇 | 引入可改变核卷积AKConv:具有任意采样形状和任意数目参数的卷积核
    前言:Hello大家好,我是小哥谈。可改变核卷积(AKConv)是一种深度学习中的卷积神经网络(CNN)结构,它可以根据需要自适应地改变其卷积核。AKConv相对于传统的卷积神经网络,具有更高的灵活性和适应性,可以在不同的任务和数据集上实现更好的性能。......
  • Win10专业工作站版永久密钥(支持重装)
    Windows10专业工作站版是Windows10操作系统的一个专门版本,旨在满足对性能和可靠性有更高要求的用户的需求。它与Windows10专业版共享许多相同的功能,但也有一些独特的功能,使其更适合需要处理苛刻工作负载的计算机。Windows10专业工作站版的一些主要功能包括:对高达6......
  • q1-投资理财-2024.3.31
    q1-投资理财-2024.3.31​ 接上回,持有的徐工机械,一边下跌一边加仓,截止到5.86清仓想全仓做t,等第二天下跌下来再买入,没想到直接高开6个点,望尘莫及,亏死。​ 盈利的基本不去动了,亏损的等以后看看能不能想办法搞回来,传智资金到12-13左右就资金一直在流出,这玩应,我发现资金流入的很有......
  • Blazor学习记录_9.C#和JS互操作__
    23.C#和JS互操作23.1C#调用JS,使用IJSRuntimejs代码:<buttononclick="javascript:alter("提示信息")">点我弹出提示</button>C#调用JS:JsInteractive.razor页面代码,InvokeVoidAsync()方法和InvokeAsync()方法@Page"/jsinteractive"<button@onclick=......
  • linux下设置环境变量导致原有环境变量失效
    搭建集群时,想新增一个环境变量,但设置错了导致原因都失效了vim/etc/profile.d/my_env.shexportPATH=/home/atguigu/bin大部分命令都使用不了了,只能使用halp下的命令[root@hadoop102module]#subash:su:未找到命令[root@hadoop102module]#lsbash:ls:未找到命令......
  • VRRP
    1.VRRP的工作原理VRRP(虚拟路由器冗余协议)概述:(1)利用VRRP,一组路由器(同一个VLAN中的接口)协同工作,但只有一个处于Master状态,处于该状态的路由器(的接口)承担实际的数据流量转发任务。在一个VRRP组内的多个路由器接口共用一个虚拟IP地址,该地址被称作为局域网内所有主机的缺省网关地址。......
  • 树哈希
    这种东西看代码比说话好用。#include<bits/stdc++.h>#defineintlonglong#defineullunsigned#defineup(i,l,r)for(inti=l;i<=r;++i)#definedn(i,r,l)for(inti=r;i>=l;--i)#definepbpush_backusingnamespacestd;constintN=111;constullmask=st......
  • 2024联合省选游记
    2024联合省选游记省选是\(3/2\)到\(3/3\),笔者写这篇文章的时候已经是三月底了,愚人节比赛刚结束没多久。为什么拖了这么久呢?初三的生活太过忙碌,让人失去了反思与字自省的意识。听我的教练说,优秀的\(OI\)选手都是有规划的,他们知道自己的水平,以及奋斗的方向。就像长途旅行前的......