vue原生实现拖拽可视化流程图连线代码

代码语言:html

所属分类:拖放

代码描述:vue原生实现拖拽可视化流程图连线代码,可导出json格式,并且可加载。

代码标签: vue 原生 实现 拖拽 可视化 流程图 连线 代码

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Vue Drag and Drop Flowchart</title>
<style>
  body
{
   
font-family: Arial, sans-serif;
     
-webkit-user-select: none; /* Safari */
   
-moz-user-select: none; /* Firefox */
   
-ms-user-select: none; /* IE/Edge */
   
user-select: none; /* 标准语法 */

 
}
 
.container {
   
position: relative;
   
width: 200vw;
   
height: 80vh;
   
background-color: #f0f0f0;
   
overflow: hidden;
 
}
 
.parat{
     
font-size: 10px;
     
padding: 6px;
 
}
 
.node {
   
position: absolute;
   
width: 200px;
   
height: auto;
   
background-color: #fff;
   
border: 1px solid #ccc;
   
box-shadow: 2px 2px 3px rgba(0,0,0,0.1);
   
   
 
   
 
}
 
.node .title{
     
padding: 10px;
     
background: #2596cc;
     
cursor: grab;
     
text-align: center;
     
color: white;
 
}
 
.connector {
   
width: 20px;
   
height: 20px;
   
background-color: red;
   
position: absolute;
   
cursor: pointer;
 
}
 
.connector-left {
   
left: -5px;
   
top: 20px;
   
transform: translateY(-50%);
 
}
 
.connector-right {
   
right: -5px;
   
top: 50%;
   
transform: translateY(-50%);
 
}
  svg
{
   
position: absolute;
   
top: 0;
   
left: 0;
   
overflow: visible;
 
}
  path
{
   
stroke: black;
   
stroke-width: 2;
   
fill: none;
 
}
 
.tool-bar {
   
height: 20vh;
   
padding: 10px;
   
background-color: #EEE;
 
}
</style>
</head>
<body>
<div id="app">
 
<div class="container" ref="container" @mousedown="onCanvasMouseDown($event)">
   
<div v-for="node in nodes" :key="node.id"
         :
style="{ left: node.x + 'px', top: node.y + 'px' }"
         
class="node"
       
>
   
<div class="title"   @mousedown.stop="onNodeMouseDown(node, $event)"
         :
data-node-id="node.id">  {{ node.name }}</div>
         
         
<div class="cont">
         
<div class="parat">入参</div>
           
<ul >
               
<li v-for="para in node.inpara">{{para}}</li>
           
</ul>
           
<div class="parat">出参</div>
         
<ul >
               
<li v-for="para in node.outpara">{{para}}</li>
           
</ul>
         
</div>
     
<div class="connector connector-left" v-if="node.type!='start'"></div>
     
<div class="connector connector-right"  v-if="node.type!='end'" @mousedown.stop="startConnecting(node, 'right', $event)"></div>
   
</div>
   
<svg v-for="line in lines" :key="line.id">
     
<path :d="generatePath(line)" @contextmenu.prevent="deleteLine(line.id)"></path>
   
</svg>
   
<svg v-if="connecting">
     
<path :d="generateTempPath()"></path>
   
</svg>
 
</div>
 
 
<div class="tool-bar">
   
<button @click="addNode">添加节点</button&.........完整代码请登录后点击上方下载按钮下载查看

网友评论0