翼度科技»论坛 编程开发 JavaScript 查看内容

jsPlumb导航器

8

主题

8

帖子

24

积分

新手上路

Rank: 1

积分
24
开源项目地址:https://gitee.com/easyxaf/jsplumb-navigator
前言

jsPlumb可用于连接DOM元素,它不依赖框架,所以与主流框架都可以无缝的集成。但比较遗憾的是社区版中没有平移、缩放等功能,如果用它来开发工作流等项目,用户体验会大打折扣。我的项目是用Blazor开发的,在比较了多款开源流程图后,最终选择了jsPlumb,所以需要为其单独开发一个导航器。
jsPlumb社区版文档:https://docs.jsplumbtoolkit.com/community/6.x/
演示


思路

这里用到了两个名词,viewport(视口)与canvas(画布),视口是有大小的,画布是没有边界的,视口是我们观察画布的窗口,你可以把视口比作放大镜,平移可以观察到画布的不同位置,远近可对画布进行放大或缩小。
在jsPlumb中,需要一个容器(container)承载节点,本项目中画布(canvas)就是jsPlumb所需要的容器,视口(viewport)就是画布的父节点。
在有了上面的概念后,就能够轻松的理解源码中一些变量的命名。
使用

下面是DOM结构
  1. <body>
  2.   
  3.    
  4.   
  5. </body>
复制代码
下面是CSS样式
  1. #viewport {
  2.   position: relative;
  3.   width: 100%;
  4.   height: 100%;
  5.   background-color: white;
  6.   overflow: hidden;
  7. }
  8. #canvas {
  9.   position: absolute;
  10. }
复制代码
上面只是一个示例,id不是必需的,canvas的position需要设置为absolute,并且不要设置canvas的大小,canvas当前的width与height应该都为0,同时overflow为visible,这些都是默认值,无需显式设置,viewport需要一个大小,并且需要将overflow设置为hidden。
将jsplumb-navigator.js添加到html中,并在初始化完jsplumb后,使用window.createJsPlumbNavigator方法创建一个导航器。
下面是示例代码
  1. jsPlumb.ready(() => {
  2.   const canvasEle = document.getElementById('canvas');
  3.   const instance = jsPlumb.newInstance({ container: canvasEle });
  4.   instance.connect({
  5.     source: document.getElementById('node1'),
  6.     target: document.getElementById('node2'),
  7.     anchors: ['Bottom', 'Top']
  8.   });
  9.   window.createJsPlumbNavigator(instance);
  10. });
复制代码
window.createJsPlumbNavigator方法还可以传入一个options,用于配置导航器
下面是options的默认值
  1. const defaultOptions = {
  2.   miniMapWidth: 200,
  3.   miniMapHeight: 150,
  4.   miniMapPosition: 'bottom-right',
  5.   toolbarPosition: 'bottom-left',
  6.   disableMiniMap: false,
  7.   disableToolbar: false,
  8. };
复制代码
options可以设置miniMap的宽度与高度,toolbar与miniMap的位置,位置有4个,分别为 top-left、top-right、bottom-right、bottom-left,toolbar默认在左下角,miniMap默认在右下角,同时也可以禁用toolbar与miniMap
window.createJsPlumbNavigator方法还会返回一个navigator对象,你可以直接使用navigator对象中提供的方法直接操作导航器
下面是导出的navigator对象
  1. window.createJsPlumbNavigator = (jsPlumbInstance, options) => {
  2.   const defaultOptions = {
  3.     miniMapWidth: 200,
  4.     miniMapHeight: 150,
  5.     miniMapPosition: 'bottom-right',
  6.     toolbarPosition: 'bottom-left',
  7.     disableMiniMap: false,
  8.     disableToolbar: false,
  9.   };
  10.   const navigator = new Navigator(jsPlumbInstance, { ...defaultOptions, ...options });
  11.   return {
  12.     getZoom: navigator.getCanvasScale.bind(navigator),
  13.     zoomTo: navigator.zoomTo.bind(navigator),
  14.     zoomIn: navigator.zoomIn.bind(navigator),
  15.     zoomOut: navigator.zoomOut.bind(navigator),
  16.     zoomTo100: navigator.zoomTo100.bind(navigator),
  17.     bestFit: navigator.bestFit.bind(navigator),
  18.     fitToViewport: navigator.fitToViewport.bind(navigator),
  19.     getMiniMapVisible: navigator.getMiniMapVisible.bind(navigator),
  20.     showMiniMap: navigator.showMiniMap.bind(navigator),
  21.     hideMiniMap: navigator.hideMiniMap.bind(navigator),
  22.     getToolbarVisible: navigator.getToolbarVisible.bind(navigator),
  23.     showToolbar: navigator.showToolbar.bind(navigator),
  24.     hideToolbar: navigator.hideToolbar.bind(navigator),
  25.     dispose: navigator.dispose.bind(navigator),
  26.   };
  27. };
复制代码
其中fitToViewport方法是用于将画布内容完全显示在视口中,bestFit方法是最佳匹配画布到视口中,它的缩放范围是0.5到1,在这个范围内将画布显示在视口中。你可以禁用toolbar后,通过navigator对象中的方法创建自己的toolbar
下面的示例代码禁用了toolbar,并将miniMap放置到了右上角,同时将画布全部显示在视口中。
  1. const navigator = window.createJsPlumbNavigator(instance, {
  2.   miniMapPosition: 'top-right',
  3.   disableToolbar: true,
  4. });
  5. navigator.fitToViewport();
复制代码
操作


  • 鼠标左键放在画布空白处或miniMap中拖放可平移画布
  • 鼠标滚轴放在画布中滚动将上下平移画布,按下Ctrl键将缩放画布
  • 鼠标滚轴放在miniMap中滚动将缩放画布
https://www.cnblogs.com/haoxj/p/18064973

来源:https://www.cnblogs.com/haoxj/p/18064973
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具