主要用css+flex布局实现样式部分,vue实现组件逻辑。首先看下效果吧:

当空间不够时还可以使用拖拽功能

接下来说明下实现思路

1.首先是实现单个节点样式,这个很简单不谈了,节点后都跟有一小段连接线,只有叶子节点没有连接线。使用伪元素after实现连接线,子节点添加额外样式来取消连接线。

2.然后是父子节点之间的连接线,因为有两种情况(a.只有一个子节点的;b.有多个子节点),所以要分情况实现

2.1子节点公共样式process-tree-childNodes设置为inline-block;vertical-align: middle;以此来实现与父节点的样式对齐; 紧跟的div设置为flex竖排布局

2.2单个子节点添加额外样式single-node,设置他的伪元素before为横向连接线,;多个子节点添加额外样式multiply-node,设置伪元素before为竖向的连接线

2.3多个子节点时的竖向连接线会多出来一部分,通过设置第一个子树节点的after伪元素和最后一个子树节点的after伪元素来遮盖住超出部分,其余的横向连接线都通过设置子树节点的before伪元素实现

好了样式部分的大体思路就是这样了。

然后是vue部分的实现,主要是各种样式的添加,树结构的数据要求组件应该可以递归使用

最后是拖拽功能,通过指令实现

首先在外部包装一层,设置overflow:hidden,内部的流程树组件设置scrolll

initDomwidth方法用来设置树的宽度,通过获取所有叶子节点的距离根节点左边的距离,取最大值做为树的宽度,防止宽度不够导致树变形。为了能够拖拽,在乘以一个系数作为最终的树宽度。

我已经上传了组件到npm,感兴趣的盆友可以试试看,npm install process-tree-vue。

最后,这个只是试验性质的demo,因为流程图多用于做展示,展示要求各种各样,可以在此基础上做调整修改来适应要求。

  

css+vue实现流程图的更多相关文章

  1. 记录近期面试题,面试总结 (从css - vue 全面面试题)

    记录近期换工作时遇到的面试题和面试题答案 css 部分 盒模型 问题:说一下 css 的盒模型 盒模型分为标准模型和怪异盒模型(IE 盒模型) 标准盒模型:盒模型的宽高只是内容(content)的宽高 ...

  2. css+vue实现添加购物车效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. animate.css VUE 使用

    1.安装 npm i animate.css --save 2.引用 main.jsimport 'animate.css' 3.使用 <img v-show="welcomeinde ...

  4. vue中使用animate.css动画库

    1.安装: npm install animate.css --save 2.引入及使用: //main.js中 import animated from 'animate.css' Vue.use( ...

  5. Vue项目零碎知识(全局js,css配置,element-UI,bs使用, img动态配置,js数组)

    全局css样式,首先在静态assets中写好文件,然后要在main.js中配置 // 配置全局css样式 // import '@/assets/css/global.css' require('@/ ...

  6. vue中使用transition和animate.css动画效果

    一.单个动画中,使用div中引用animate动画 1.下载依赖 npm install animate.css –save 2.main.js中全局引用 import animate from 'a ...

  7. vue 项目如何使用animate.css

    Animate.css是一款酷炫丰富的跨浏览器动画库,它在GitHub上的star数至今已有5.3万+. 在vue项目中我们可以借助于animate.css,用十分简单的代码来实现一个个炫酷的效果!( ...

  8. day 87 Vue学习六之axios、vuex、脚手架中组件传值

      本节目录 一 axios的使用 二 vuex的使用 三 组件传值 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 axios的使用 Axios 是一个基于 promise 的 HT ...

  9. day 84 Vue学习六之axios、vuex、脚手架中组件传值

    Vue学习六之axios.vuex.脚手架中组件传值   本节目录 一 axios的使用 二 vuex的使用 三 组件传值 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 axios的 ...

随机推荐

  1. VS2017 配置 boost_1_70

    1. 下载与安装 1.1 安装方法1 (1) 下载 https://www.boost.org/ 或者使用 https://sourceforge.net/projects/boost/files/b ...

  2. javascript原型链[图]

  3. Django:母版、继承、组件、自定义标签

    1.for循环应用 1.1for Variable Description forloop.counter 当前循环的索引值(从1开始) forloop.counter0 当前循环的索引值(从0开始) ...

  4. C++ Win32 遍历窗口

    查找指定窗口 #include <iostream> #include <windows.h> using namespace std; int main() { TCHAR ...

  5. RabbitMQ实战场景(一):异步记录用户操作日志

    传统的项目开发中业务流程以串行方式,执行了模块1—>模块2–>模块3 而我们知道,这个执行流程其实对于整个程序来讲是有一定的弊端的,主要有几点: (1)整个流程的执行响应等待时间比较长; ...

  6. .NET CORE 技术债

    技术债:OCELOT 网关/熔断/降级/限流CONSUL 服务注册/发现CAP 分布式事件总线SKYWALKING 微服务监控

  7. 卷积神经网络快速入门【基于TensorFlow】

    一.概述 卷积神经网络[Convolutional neural networks]里面最重要的构建单元是卷积层.神经元在第一个卷积层不是连接输入图片的每一个像素,只是连接它们感受野1的像素,以此类推 ...

  8. linux 内网时间同步配置

    在工作中,内网环境机器的时间会有所差异,在某些测试环境下需要一毫秒都不允许出现误差,但又不想同步外网时间,那我们可以选择一台机器作为时间服务器来供其他机器进行时间同步,例如每隔1分钟同步一次时间. 一 ...

  9. MySQL Replication--修复从库上单个数据库的数据

    问题描述 由于运维失误,从库未及时设置read_only,导致从库上某库数据被修改,由于整个实例数据量较大,重做成本较高,而该数据库数据较少,因此考虑如何修复该数据库的数据. 操作前提 1.复制使用位 ...

  10. centos 7 安装webmin

    wget http://prdownloads.sourceforge.net/webadmin/webmin-1.930-1.noarch.rpm yum -y install perl perl- ...