Project Icon

Drawflow

简洁易用的JavaScript流程图库

Drawflow是一个轻量级的JavaScript流程图库,用于快速创建交互式数据流图表。该库支持节点拖拽、多输入输出、连接管理、模块化设计和移动设备兼容等功能。Drawflow无外部依赖,易于集成,并支持Vue组件。它适用于需要可视化工作流程或数据流的各种Web应用开发。

npm npm npm bundle size GitHub license Twitter URL

Drawflow

演示

简单的流程库。

Drawflow 允许您轻松快速地创建数据流。

只需安装一个 JavaScript 库,使用四行代码即可。

在线演示

🎨 主题编辑生成器

目录

特性

  • 拖拽节点
  • 多个输入/输出
  • 多个连接
  • 删除节点和连接
  • 添加/删除输入/输出
  • 重新路由连接
  • 节点数据同步
  • 放大/缩小
  • 清除模块数据
  • 支持模块
  • 编辑器模式 editfixedview
  • 导入/导出数据
  • 事件
  • 移动设备支持
  • 原生 JavaScript(无依赖)
  • NPM
  • Vue 支持组件节点 && Nuxt

安装

下载或克隆仓库并复制 dist 文件夹,CDN 选项或 npm。

克隆

git clone https://github.com/jerosoler/Drawflow.git

CDN

# 最新版
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/jerosoler/Drawflow/dist/drawflow.min.css">
<script src="https://cdn.jsdelivr.net/gh/jerosoler/Drawflow/dist/drawflow.min.js"></script>
# 或指定版本 查看发布版本 https://github.com/jerosoler/Drawflow/releases
<link rel="stylesheet" href="https://unpkg.com/drawflow@x.x.xx/dist/drawflow.min.css" />
<script src="https://unpkg.com/drawflow@x.x.xx/dist/drawflow.min.js"></script>

NPM

npm i drawflow

TypeScript

外部包。更多信息 #119

npm install -D @types/drawflow

导入

import Drawflow from 'drawflow'
import styleDrawflow from 'drawflow/dist/drawflow.min.css'

引用

var Drawflow = require('drawflow')
var styleDrawflow = require('drawflow/dist/drawflow.min.css')

创建 drawflow 的父元素。

<div id="drawflow"></div>

运行

启动 drawflow。

var id = document.getElementById("drawflow");
const editor = new Drawflow(id);
editor.start();
参数类型描述
idObject模块名称
renderObject用于 Vue
parentObject用于 Vue。父实例

Vue 2 示例

import Vue from 'vue'

// 传递 Vue 渲染
this.editor = new Drawflow(id, Vue, this);

Vue 3 示例

import { h, getCurrentInstance, render } from 'vue'
const Vue = { version: 3, h, render };

this.editor = new Drawflow(id, Vue);
// 传递 Vue 3 实例渲染
const internalInstance = getCurrentInstance()
editor.value = new Drawflow(id, Vue, internalInstance.appContext.app._context);

Nuxt

添加到 nuxt.config.js 文件

build: {
    transpile: ['drawflow'],
    ...
  }

鼠标和按键

  • del 键 删除元素。
  • 右键单击 显示删除选项(移动设备长按)。
  • 左键按住 移动编辑器或选中的节点。
  • Ctrl + 鼠标滚轮 放大/缩小(移动设备捏合)。

编辑器

您可以将编辑器更改为 fixed 类型以锁定。只能移动编辑器。您可以在启动前设置。

editor.editor_mode = 'edit'; // 默认
editor.editor_mode = 'fixed'; // 仅滚动

您还可以调整缩放值。

editor.zoom_max = 1.6;
editor.zoom_min = 0.5;
editor.zoom_value = 0.1;

编辑器选项

参数类型默认值描述
rerouteBooleanfalse激活重新路由
reroute_fix_curvatureBooleanfalse修复添加点
curvatureNumber0.5曲率
reroute_curvature_start_endNumber0.5重新路由第一个点和最后一个点的曲率
reroute_curvatureNumber0.5重新路由曲率
reroute_widthNumber6重新路由宽度
line_pathNumber5线条宽度
force_first_inputBooleanfalse强制第一个输入在节点顶部放置连接
editor_modeTexteditedit 用于编辑,fixed 用于固定节点但其输入字段可用,view 仅用于查看
zoomNumber1默认缩放
zoom_maxNumber1.6默认最大缩放
zoom_minNumber0.5默认最小缩放
zoom_valueNumber0.1默认缩放值更新
zoom_last_valueNumber1默认上次缩放值
draggable_inputsBooleantrue点击输入时拖动节点
useuuidBooleanfalse使用 UUID 作为节点 ID 而不是整数索引。仅影响新创建的节点,不影响导入的节点

重新路由

激活重新路由连接。在 startimport 之前使用。

editor.reroute = true;

双击线条连接创建点。双击点删除。

模块

将流程分离到不同的编辑器中。

editor.addModule('nameNewModule');
editor.changeModule('nameNewModule');
editor.removeModule('nameModule');
// 默认模块是 Home
editor.changeModule('Home');

RemovedModule 如果在同一模块中,则重定向到 Home 模块

节点

添加节点很简单。

editor.addNode(name, inputs, outputs, posx, posy, class, data, html);
参数类型描述
nametext模块名称
inputsnumber输入数量
outputsnumber输出数量
pos_xnumber节点起始左侧位置
pos_ynumber节点起始顶部位置
classtext添加到节点的类名。多个类名用空格分隔
datajson传递给节点的数据
htmltext在节点上绘制的 HTML 或注册节点的 name
typenodeboolean & text默认 falsetrue 表示 HTML 对象,vue 表示 vue

您可以在 inputs、textarea 或 select 中使用属性 df-* 来与节点数据同步,以及 contenteditable

支持多个父级的属性 df-*-*...

节点示例

var html = `
<div><input type="text" df-name></div>
`;
var data = { "name": '' };

editor.addNode('github', 0, 1, 150, 300, 'github', data, html);

注册节点

可以注册节点以便重复使用。

var html = document.createElement("div");
html.innerHTML =  "Hello Drawflow!!";
editor.registerNode('test', html);
// 使用
editor.addNode('github', 0, 1, 150, 300, 'github', data, 'test', true);

// 对于 vue
import component from '~/components/testcomponent.vue'
editor.registerNode('name', component, props, options);
// 对于 vue 的使用
editor.addNode('github', 0, 1, 150, 300, 'github', data, 'name', 'vue');
参数类型描述
name文本注册的模块名称。
html文本要绘制的 HTML 或 vue 组件。
propsjson仅用于 vue。组件的 props。非必需
optionsjson仅用于 vue。组件的选项。非必需

方法

其他可用函数。

方法描述
zoom_in()增加缩放 +0.1
zoom_out()减小缩放 -0.1
getNodeFromId(id)获取节点信息。例:id: 5
getNodesFromName(name)返回节点 id 数组。例:name: telegram
removeNodeId(id)移除节点。例 id: node-x
updateNodeDataFromId更新数据元素。例:5, { name: 'Drawflow' }
addNodeInput(id)向节点添加输入。例 id: 5
addNodeOutput(id)向节点添加输出。例 id: 5
removeNodeInput(id, input_class)从节点移除输入。例 id: 5, input_2
removeNodeOutput(id, output_class)从节点移除输出。例 id: 5, output_2
addConnection(id_output, id_input, output_class, input_class)添加连接。例:15,16,'output_1','input_1'
removeSingleConnection(id_output, id_input, output_class, input_class)移除连接。例:15,16,'output_1','input_1'
updateConnectionNodes(id)更新来自节点的连接位置 例 id: node-x
removeConnectionNodeId(id)移除节点连接。例 id: node-x
getModuleFromNodeId(id)获取 id 所在模块的名称。例 id: 5
clearModuleSelected()清除所选模块的数据
clear()清除所有模块的所有数据并移除模块。

方法示例

editor.removeNodeId('node-4');

事件

你可以检测正在发生的事件。

可用事件列表:

事件返回描述
nodeCreatedid节点的 id
nodeRemovedid节点的 id
nodeDataChangedid节点的 id df-* 属性已更改。
nodeSelectedid节点的 id
nodeUnselectedtrue取消选择节点
nodeMovedid节点的 id
connectionStart{ output_id, output_class }节点的 id 和选定的输出
connectionCanceltrue连接取消
connectionCreated{ output_id, input_id, output_class, input_class }节点的 id 和选定的输出/输入
connectionRemoved{ output_id, input_id, output_class, input_class }节点的 id 和选定的输出/输入
connectionSelected{ output_id, input_id, output_class, input_class }节点的 id 和选定的输出/输入
connectionUnselectedtrue取消选择连接
addRerouteid节点输出的 id
removeRerouteid节点输出的 id
rerouteMovedid节点输出的 id
moduleCreatedname模块的 name
moduleChangedname模块的 name
moduleRemovedname模块的 name
clickevent点击事件
clickEndevent点击更改完成后
contextmenuevent鼠标右键点击事件
mouseMove{ x, y }位置
mouseUpevent鼠标抬起事件
keydownevent键盘按下事件
zoomzoom_level缩放级别
translate{ x, y }编辑器平移位置
importimport导入完成
exportdata导出数据

事件示例

editor.on('nodeCreated', function(id) {
  console.log("节点已创建 " + id);
})

导出 / 导入

你可以导出和导入你的数据。

var exportdata = editor.export();
editor.import(exportdata);

导出示例

导出数据的示例:

{
    "drawflow": {
        "Home": {
            "data": {}
        },
        "Other": {
            "data": {
                "16": {
                    "id": 16,
                    "name": "facebook",
                    "data": {},
                    "class": "facebook",
                    "html": "\n        
\n          
 Facebook 消息
\n        
\n        ",
                    "inputs": {},
                    "outputs": {
                        "output_1": {
                            "connections": [
                                {
                                    "node": "17",
                                    "output": "input_1"
                                }
                            ]
                        }
                    },
                    "pos_x": 226,
                    "pos_y": 138
                },
                "17": {
                    "id": 17,
                    "name": "log",
                    "data": {},
                    "class": "log",
                    "html": "\n            
\n              
 保存日志文件
\n            
\n            ",
                    "inputs": {
                        "input_1": {
                            "connections": [
                                {
                                    "node": "16",
                                    "input": "output_1"
                                }
                            ]
                        }
                    },
                    "outputs": {},
                    "pos_x": 690,
                    "pos_y": 129
                }
            }
        }
    }
}

示例

docs 文件夹中查看完整示例。 还有一个示例展示如何在自定义元素中使用 Drawflow。(基于 LitElement)。

许可

MIT 许可

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号