Flowy

创建流程图的最小 JavaScript 库。「The minimal javascript library to create flowcharts ✨」

Github星跟踪图

Flowy

Demo
A javascript library to create pretty flowcharts with ease ✨

Dribbble, Twitter, Live demo

Flowy makes creating WebApps with flowchart functionality an incredibly simple task. Build automation software, mind mapping tools, or simple programming platforms in minutes by implementing the library into your project.

Made by Alyssa X

Table of contents

Features

Currently, Flowy supports the following:

  • Responsive drag and drop
  • Automatic snapping
  • Block rearrangement
  • Delete blocks
  • Automatic block centering
  • Conditional snapping
  • Import saved files
  • Mobile support
  • Vanilla javascript (no dependencies)
  • npm install

You can suggest new features here

Installation

Adding Flowy to your WebApp is incredibly simple:

  1. Link flowy.min.js and flowy.min.css to your project
  2. Create a canvas element that will contain the flowchart (for example, <div id="canvas"></div>)
  3. Create the draggable blocks with the .create-flowy class (for example, <div class="create-flowy">Grab me</div>)

Running Flowy

Initialization

flowy(canvas, ongrab, onrelease, onsnap, spacing_x, spacing_y);

Parameter, Type, Description
---, ---, ---
canvas, javascript DOM element, The element that will contain the blocks
ongrab, function (optional), Function that gets triggered when a block is dragged
onrelease, function (optional), Function that gets triggered when a block is released
onsnap, function (optional), Function that gets triggered when a block snaps with another one
spacing_x, integer (optional), Horizontal spacing between blocks (default 20px)
spacing_y, integer (optional), Vertical spacing between blocks (default 80px)

To define the blocks that can be dragged, you need to add the class .create-flowy

Example

HTML

<div class="create-flowy">The block to be dragged</div>
<div id="canvas"></div>

Javascript

var spacing_x = 40;
var spacing_y = 100;
// Initialize Flowy
flowy(document.getElementById("canvas"), onGrab, onRelease, onSnap, spacing_x, spacing_y);
function onGrab(block){
	// When the user grabs a block
}
function onRelease(){
	// When the user releases a block
}
function onSnap(block, first, parent){
	// When a block snaps with another one
}

Callbacks

In order to use callbacks, you need to add the functions when initializing Flowy, as explained before.

On grab

function onGrab(block){
	// When the user grabs a block
}

Gets triggered when a user grabs a block with the class create-flowy

Parameter, Type, Description
---, ---, ---
block, javascript DOM element, The block that has been grabbed

On release

function onRelease(){
	// When the user lets go of a block
}

Gets triggered when a user lets go of a block, regardless of whether it attaches or even gets released in the canvas.

On snap

function onSnap(block, first, parent){
	// When a block can attach to a parent
	return true;
}

Gets triggered when a block can attach to another parent block. You can either prevent the attachment, or allow it by using return true;

Parameter, Type, Description
---, ---, ---
block, javascript DOM element, The block that has been grabbed
first, boolean, If true, the block that has been dragged is the first one in the canvas
parent, javascript DOM element, The parent the block can attach to

Methods

Get the flowchart data

// As an object
flowy.output();
// As a JSON string
JSON.stringify(flowy.output());

The JSON object that gets outputted looks like this:

[
	html: "",
	blockarr: [],
	blocks: [
		{
			"id": 1,
			"parent": 0,
			"data": [
				{
				"name": "blockid",
				"value": "1"
				}
			],
			"attr": [
				{
				"id": "block-id",
				"class": "block-class"
			]
		}
	]
]

Here's what each property means:

Key, Value type, Description
---, ---, ---
html, string, Contains the canvas data
blockarr, array, Contains the block array generated by the library (for import purposes)
blocks, array, Contains the readable block array
id, integer, Unique value that identifies a block
parent, integer, The id of the parent a block is attached to (-1 means the block has no parent)
data, array of objects, An array of all the inputs within a certain block
name, string, The name attribute of the input
value, string, The value attribute of the input
attr, array of objects, Contains all the data attributes of a certain block

Import the flowchart data

flowy.import(output)

Allows you to import entire flowcharts initially exported using the previous method, flowy.output()

Parameter, Type, Description
---, ---, ---
output, javascript DOM element, The data from flowy.output()

Delete all blocks

To remove all blocks at once use:

flowy.deleteBlocks()

Currently there is no method to individually remove blocks. The only way to go about it is by splitting branches manually.

Feel free to reach out to me through email at hi@alyssax.com or on Twitter if you have any questions or feedback! Hope you find this useful ?

概览

名称与所有者alyssaxuu/flowy
主编程语言JavaScript
编程语言JavaScript (语言数: 1)
平台
许可证MIT License
发布数0
创建于2019-11-27 14:03:51
推送于2023-01-01 11:48:42
最后一次提交2022-07-02 10:11:05
星数11.1k
关注者数162
派生数1k
提交数155
已启用问题?
问题数125
打开的问题数46
拉请求数6
打开的拉请求数9
关闭的拉请求数6
已启用Wiki?
已存档?
是复刻?
已锁定?
是镜像?
是私有?
去到顶部