当前位置: 首页 > news >正文

风景名胜区建设部网站沈阳线上教学

风景名胜区建设部网站,沈阳线上教学,广州哪里有正规的技能培训,在那个网站做直播好赚钱项目背景 最近在准备开发工作流引擎相关模块,完成表结构设计后开始着手流程设计器的技术选型,调研了众多开源项目后决定基于jsplumb.js开源库进行自研开发,保证定制化的便捷性,相关效果图及项目地址如下 项目地址:ht…

项目背景

最近在准备开发工作流引擎相关模块,完成表结构设计后开始着手流程设计器的技术选型,调研了众多开源项目后决定基于jsplumb.js开源库进行自研开发,保证定制化的便捷性,相关效果图及项目地址如下

项目地址:https://gitee.com/code2roc/fast-flow-desgion

在这里插入图片描述

需求概述

流程设计器中最基础的两个元素为活动(节点)和变迁(连接),我们需要以下基础功能来配合相关接口进行工作流相关设计数据的保存/修改

  • 活动的添加/删除/移动
  • 变迁的添加/删除
  • 活动/变迁数据的全部读取
  • 根据json渲染活动与变迁

相关引入依赖如下表所示

名称功能
jsplumb.js设计器主要依赖,用于绘制相关图形与动态操作实现
jquery.jsjsplumb依赖的库
jquery-ui.jsjsplumb依赖的库,进行拖拽绑定
contextMenu.js实现右击菜单
mustache.js模板引擎渲染活动,避免字符串拼接

实现思路

活动添加

通过mustache的render方法渲染添加到html后,需要调用draggable方法让活动能够进行自由拖动,其中grid参数作用是固定每次拖拽移动最小距离,便于不同节点经过移动后对齐

<script type="text/x-mustache" id="jnode-template"><div class="jnode-panel" id="{{id}}" jnode="{{jnode}}" style="top:{{top}}px;left:{{left}}px"><div class="jnode-box {{jnodeClass}}">{{{jnodeHtml}}}</div></div>
</script>jsPlumb.draggable(id, {containment: 'parent',grid: [8, 8]
})

活动删除

通过jsPlumb.remove方法删除,会删除相关活动与连接的变迁,参数是活动id,通过右键菜单的点击事件获取属性

 callback: function(itemKey, opt, rootMenu, originalEvent) {var id = $($(opt.$trigger[0]).parent()).attr("id");jsPlumb.remove(id)
}

活动移动

在活动拖动的过程中位置进行变化,我们需要进行事件监听获取实时位置保存到数据库,通过jsPlumb.draggable方法的stop方法注册实现

    jsPlumb.draggable(id, {containment: 'parent',grid: [8, 8],stop: function(event, ui) {var nodeID = $(ui.helper.context).attr("id");moveActivity(nodeID, ui.position.left, ui.position.top);}});

变迁添加

jsplumb节点可以添加相关锚点,连接不同锚点会自动绘制连线,在实际操作时连线要求锚点对准操作精度较高不便捷,所以我们通过设置节点整体对象为连接对象,可实现鼠标放置在活动div范围内进行拖拽连线,需要注意makeSource和makeTarget需要同时执行,节点才能作为起点与终点

function registAutoConnect(id) {jsPlumb.makeSource(id, {endpoint: "Dot",anchor: "Continuous"})jsPlumb.makeTarget(id, {endpoint: "Dot",anchor: "Continuous"})
}

以上方法是手动在流程设计器中进行操作连接,如果我们通过接口获取已有数据,需要通过connect方法进行代码渲染变迁

需要注意jsplumb中connection的id为自动生成,我们需要通过setAttribute方法对canvas进行id赋值操作,才能绑定我要自己的id数据

function addConnect(id, sourceID, targetID) {var connection = jsPlumb.connect({source: sourceID,target: targetID});connection.id = idjsPlumb.setAttribute(connection.canvas, "id", connection.id)
}

通过监听connection事件我们可以知道连接添加完成,进行相关接口调用,但我们需要区分是我们通过设计器操作还是代码渲染,只要判断originalEvent是否存在,存在则是通过鼠标操作的

    jsPlumb.bind("connection", function(connInfo, originalEvent) {if (originalEvent) {}});

变迁删除

通过jsPlumb.detach方法进行变迁的删除,默认只删除变迁不删除连接的活动

function deleteConnect(id) {var connects = jsPlumb.getAllConnections();for (var i = 0; i < connects.length; i++) {var connect = connects[i];if (connect.id == id) {jsPlumb.detach(connect)}}
}

其它

代码还包含很多其他细节,如下所示,就不详细赘述了,大家可以仔细阅读,项目中包含了详细的注释

  • 连接添加控制,例如开始节点不能为连接终点,结束节点不能为起点
  • 导入默认配置控制连线样式
  • 各种操作模式指针变换及交互模式
  • 流程图整体移动
  • 活动/变迁的选中效果及点击空白处取消
http://www.wangmingla.cn/news/42428.html

相关文章:

  • 做毕设好的网站百度正版下载
  • 合肥网络推广软件seo搜索引擎优化介绍
  • 中国有几大网站2023新闻大事件摘抄
  • 大学网站建设专业武汉百度快速排名提升
  • 网站域名注册哪个好百度竞价排名榜
  • 十度网站建设网页查询
  • 保健品商城网站模板门户网站怎么做
  • 小公司做网站需要注意什么百度指数官网首页
  • 都江堰旅游门户网站苏州关键词排名系统
  • 网站建设的内容管理百度竞价排名的利与弊
  • 做动态二维码的网站广州网站建设方案优化
  • 电影天堂网站用什么程序做的谷歌推广开户多少费用
  • 网站建设所用的工具疫情防控最新通告
  • 网站建设设计原则seo推广技术培训
  • 建设工程司法解释想做seo哪里有培训的
  • 品牌的佛山网站建设价格什么网站百度收录快
  • 微盟登录平台苏州网络推广seo服务
  • 动态网站开发与设计十大软件免费下载网站排行榜
  • 双城网站建设公司市场监督管理局官网入口
  • 厦门建设银行招聘网站百度首页优化排名
  • vs做网站开发吗友情视频
  • 英语工作室网站怎么做所有代刷平台推广
  • 如何让网站打不开 解析外链购买交易平台
  • 江苏网站建设怎么样群发软件
  • 网上购物网站网站建设分析seo流量的提升的软件
  • 网站栏目下拉菜单软文代写平台有哪些
  • 自己做的网站服务器在哪里seo顾问阿亮博客
  • 网站开发背景意义佛山优化推广
  • 论坛的网站开发项目深圳优化seo排名
  • 做gif动图的素材网站友情链接的方式如何选择