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