Drawflow

Drawflow

简洁易用的JavaScript流程图库

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

Drawflow流程图库节点编辑数据流JavaScriptGithub开源项目

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 许可

编辑推荐精选

即梦AI

即梦AI

一站式AI创作平台

提供 AI 驱动的图片、视频生成及数字人等功能,助力创意创作

扣子-AI办公

扣子-AI办公

AI办公助手,复杂任务高效处理

AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!

Keevx

Keevx

AI数字人视频创作平台

Keevx 一款开箱即用的AI数字人视频创作平台,广泛适用于电商广告、企业培训与社媒宣传,让全球企业与个人创作者无需拍摄剪辑,就能快速生成多语言、高质量的专业视频。

TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

热门AI工具生产力协作转型TraeAI IDE
蛙蛙写作

蛙蛙写作

AI小说写作助手,一站式润色、改写、扩写

蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。

AI助手AI工具AI写作工具AI辅助写作蛙蛙写作学术助手办公助手营销助手
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

聊天机器人AI助手热门AI工具AI对话
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

热门AI工具AI办公办公工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

模型训练热门AI工具内容创作智能问答AI开发讯飞星火大模型多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

下拉加载更多