vue + 原生JS开发的流程图组件

269 阅读1分钟

vue-super-flow

  • 一个基于 Vue 的在线流程编辑组件。
  • Demo
  • docs

安装

npm install vue-super-flow

yran add vue-spuer-flow

使用

import SuperFlow from 'vue-super-flow'
import 'vue-super-flow/lib/index.css'

Vue.use(SuperFlow)

算法解析

  • 判断鼠标相对元素位置
  1. 首先获取元素中心位置;
  2. 计算元素左上角、右上角、右下角、左下角;
  3. 计算 4 角与 中心点向量夹角;
  4. 计算鼠标位置与中心点的向量夹角;
  5. 使用计算得到的角度判断可以得到鼠标处于元素的哪个方向;

image.png

  • 关于拖拽
  1. 记录 mousedown 时 clietX clientY,以及鼠标相对拖拽节点 的 offsetTop offsetLeft 记录 node mousedown 状态。
  2. mousemove 时 判断 node mousedown状态 并判断移动距离大于 5 时进入拖拽状态。进入拖拽状态后鼠标移动更新节点定位。 定位元素公式为:top = clientY - Node.top - offsetTop left = clietX - Node.left - offsetLeft (node 的 top 和 left 通过 ElementNode.getBoundingClientRect() 获取)
  3. mouseup 时移除鼠标按下状态 移除拖拽状态并更新数据。

全局引用


import SuperFlow from 'vue-super-flow'
import 'vue-super-flow/lib/index.css'

Vue.use(SuperFlow)

局部引用

<template>
  <super-flow></super-flow>
</template>

<script >
  import SuperFlow from 'vue-super-flow' 
  import 'vue-super-flow/lib/index.css'
  export default {
    components: {SuperFlow}   
  } 
</script>