前言

什么是 GoJs

GoJs 是一个 JavaScripttypescript 库,用于构建交互式图表,可以轻易的实现日常开发中所需要的各种示意图、结构图、组织图、流程图、状态图、思维导图、树状图等。

它用自定义模板和布局组件简化了节点、链接和分组等复杂的 JS 图表,给用户交互提供了许多先进的功能,如拖拽、复制、粘贴、文本编辑、工具提示、上下文菜单、自动布局、模板、数据绑定和模型、事务状态和撤销管理、调色板、概述、事件处理程序、命令和自定义操作的扩展工具系统。

无需切换服务器和插件,GoJS 就能实现用户互动并在浏览器中完全运行,呈现 HTML5 Canvas 元素或 SVG,也不用服务器端请求。

安装

npm i gojs -S 

去水印

GoJs 是一个商业软件,所以我们通过 NPM 安装的模块,如果没有支付费用的话,默认会带有水印。

image.png

方法仅供学习,请支持正版软件

我们可以通过修改源码的方式去除水印。

  • 首先找到这个文件 node_modules\gojs\release\go.js
  • 然后在文件中搜索 7eba17a4ca3b1a8346
  • 找到类似于 a.kv=d[w.Jg(“7eba17a4ca3b1a8346”) **][w.Jg(“78a118b7”)]****(d,w.um,4,4) 这样的一句代码
  • 将此条语句替换成 a.Jv=function(){return true}; 保存即可

最终如果呈现以下效果,则说明去除水印成功。

image.png

使用

GoJS 不依赖于任何 JS 库或框架(例如 bootstrapjquery 等),可与任何 HTMLJS 框架配合工作。本文基于 vue2.x 作为基础前端框架。

初始化

GoJs 需要提供一个节点作为容器,并且图形的容器 div 需要明确指定大小(支持固定值以及百分比),否则无法显示,容器支持部分 CSS 样式,比如背景颜色,边框等,这个容器可以理解为画布。

<template>
  <!-- 图形的容器 div 需要明确指定大小,否则无法显示 -->
  <div id="diagram" style="width:50%; height:50%; background-color: #DAE4E4;"></div>
</template> 

因为全局都会用到 go.GraphObject.make 这个方法,所以我们在导入以后直接声明一个全局变量,这个变量可以理解为画笔。

import go from 'gojs'
// 获取 gojs 的方法
const $ = go.GraphObject.make; 

接下来进行 GoJs 的初始化部分。这个是官网的例子,先不用知道每一行代码的作用,我们先把程序跑起来,页面画出来。

// 初始化gojs
initGoJs() {
  // 将 gojs 挂载到 div 上 ,canvas 的大小由 div 的宽高决定
  this.diagram =
    $(go.Diagram, "diagram",
      {
        "undoManager.isEnabled": true
      });

  const myModel = $(go.Model);
  myModel.nodeDataArray = [
    { key: "Alpha" },
    { key: "Beta" },
    { key: "Gamma" }
  ];
  this.diagram.model = myModel;
} 

以上简单的代码呈现出下面的结果。

image.png

其可以实现的功能如下

  • 点击空白并按住鼠标左键,可以通过平移整个图表
  • 点击节点可以选中某个节点,选中的节点高亮显示
  • 使用 Ctrl+A 可以选中所有元素
  • 按住 ctrl 键,点击鼠标左键可以选择多个元素
  • 选中节点并按住鼠标左键,可以移动特定节点
  • 点击空白并按住鼠标左键,点击后等 1s 再滑动鼠标,可以画出一个选择框,选中多个节点
  • 选中节点后,使用 ctrl+cctrl+v 的方式可以复制节点
  • 选中节点后,使用 delete 按钮可以删除节点
  • 按住 ctrl 键,滑动鼠标滚轮(或者 + - 号)可以进行整个图表的缩放,ctrl + 0 恢复初始大小
  • 使用 ctrl+zctrl+y 可以进行撤回和重做操作(由代码中的 "undoManager.isEnabled": true 控制)

可以看到,当前代码量只有几行,在一个代码量比较少的情况可以完成这么多功能,可以看出 GoJs 本身已经将大部分交互的动作内置到框架本身,只需要通过设置相应的属性即可完成。

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐