drawflow.js实现一个拖拽绘制流程图效果代码
代码语言:html
所属分类:其他
代码描述:drawflow.js实现一个拖拽绘制流程图效果代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Drawflow | Simple Flow program libray</title> <meta name="description" content="Simple library for flow programming. Drawflow allows you to create data flows easily and quickly."> </head> <body> <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/drawflow.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.0/js/all.min.js" integrity="sha256-KzZiKy0DWYsnwMF+X1DvQngQ2/FxF7MF3Ff72XcpuPs=" crossorigin="anonymous"></script> <link type="text/css" rel="stylesheet" href="//repo.bfw.wiki/bfwrepo/css/drawflow.min.css"> <style> :root { --border-color: #cacaca; --background-color: #ffffff; --background-box-title: #f7f7f7; } html, body { margin: 0px; padding: 0px; width: 100vw; height: 100vh; overflow: hidden; font-family: 'Roboto', sans-serif; } header { height: 66px; border-bottom: 1px solid var(--border-color); padding-left: 20px; } header h2 { margin: 0px; line-height: 66px; } header a { color: black; } .them-edit-link { position: absolute; top: 10px; right: 100px; color: black; font-size: 40px; } .them-edit-link a { text-decoration: none; } .github-link{ position: absolute; top: 10px; right: 20px; color: black; } .wrapper { width: 100%; height: calc(100vh - 67px); display: flex; } .col { overflow: auto; width: 300px; height: 100%; border-right: 1px solid var(--border-color); } .drag-drawflow { line-height: 50px; border-bottom: 1px solid var(--border-color); padding-left: 20px; cursor: move; user-select: none; } .menu { position: absolute; height: 40px; display: block; background: white; width: 100%; } .menu ul { padding: 0px; margin: 0px; line-height: 40px; } .menu ul li { display: inline-block; margin-left: 10px; border-right: 1px solid var(--border-color); padding-right: 10px; line-height: 40px; cursor: pointer; } .menu ul li.selected { font-weight: bold; } .btn-export { float: right; position: absolute; top: 10px; right: 10px; color: white; font-weight: bold; border: 1px solid #0e5ba3; background: #4ea9ff; padding: 5px 10px; border-radius: 4px; cursor: pointer; z-index: 5; } .btn-clear { float: right; position: absolute; top: 10px; right: 85px; color: white; font-weight: bold; border: 1px solid #96015b; background: #e3195a; padding: 5px 10px; border-radius: 4px; cursor: pointer; z-index: 5; } .swal-wide{ width:80% !important; } .btn-lock { float: right; position: absolute; bottom: 10px; right: 140px; display: flex; font-size: 24px; color: white; padding: 5px 10px; background: #555555; border-radius: 4px; border-right: 1px solid var(--border-color); z-index: 5; cursor: pointer; } .bar-zoom { float: right; position: absolute; bottom: 10px; right: 10px; display: flex; font-size: 24px; color: white; padding: 5px 10px; background: #555555; border-radius: 4px; border-right: 1px solid var(--border-color); z-index: 5; } .bar-zoom svg { cursor: pointer; padding-left: 10px; } .bar-zoom svg:nth-child(1) { padding-left: 0px; } #drawflow { position: relative; width: calc(100vw - 301px); height: calc(100% - 50px); top: 40px; background: var(--background-color); background-size: 25px 25px; background-image: linear-gradient(to right, #f1f1f1 1px, transparent 1px), linear-gradient(to bottom, #f1f1f1 1px, transparent 1px); } @media only screen and (max-width: 768px) { .col { width: 50px; } .col .drag-drawflow span { display:none; } #drawflow { width: calc(100vw - 51px); } } /* Editing Drawflow */ .drawflow .drawflow-node { background: var(--background-color); border: 1px solid var(--border-color); -webkit-box-shadow: 0 2px 15px 2px var(--border-color); box-shadow: 0 2px 15px 2px var(--border-color); padding: 0px; width: 200px; } .drawflow .drawflow-node.selected { background: white; border: 1px solid #4ea9ff; -webkit-box-shadow: 0 2px 20px 2px #4ea9ff; box-shadow: 0 2px 20px 2px #4ea9ff; } .drawflow .drawflow-node.selected .title-box { color: #22598c; /*border-bottom: 1px solid #4ea9ff;*/ } .drawflow .connection .main-path { stroke: #4ea9ff; stroke-width: 3px; } .drawflow .drawflow-node .input, .drawflow .drawflow-node .output { height: 15px; width: 15px; border: 2px solid var(--border-color); } .drawflow .drawflow-node .input:hover, .drawflow .drawflow-node .output:hover { background: #4ea9ff; } .drawflow .drawflow-node .output { right: 10px; } .drawflow .drawflow-node .input { left: -10px; background: white; } .drawflow > .drawflow-delete { border: 2px solid #43b993; background: white; color: #43b993; -webkit-box-shadow: 0 2px 20px 2px #43b993; box-shadow: 0 2px 20px 2px #43b993; } .drawflow-delete { border: 2px solid #4ea9ff; background: white; color: #4ea9ff; -webkit-box-shadow: 0 2px 20px 2px #4ea9ff; box-shadow: 0 2px 20px 2px #4ea9ff; } .drawflow-node .title-box { height: 50px; line-height: 50px; background: var(--background-box-title); border-bottom: 1px solid #e9e9e9; border-radius: 4px 4px 0px 0px; padding-left: 10px; } .drawflow .title-box svg { position: initial; } .drawflow-node .box { padding: 10px 20px 20px 20px; font-size: 14px; color: #555555; } .drawflow-node .box p { margin-top: 5px; margin-bottom: 5px; } .drawflow-node.welcome { width: 250px; } .drawflow-node.slack .title-box { border-radius: 4px; } .drawflow-node input, .drawflow-node select, .drawflow-node textarea { border-radius: 4px; border: 1px solid var(--border-color); height: 30px; line-height: 30px; font-size: 16px; width: 158px; color: #555555; } .drawflow-node textarea { height: 100px; } .drawflow-node.personalized { background: red; height: 200px; text-align: center; color: white; } .drawflow-node.personalized .input { background: yellow; } .drawflow-node.personalized .output { background: green; } .drawflow-node.personalized.selected { background: blue; } .drawflow .connection .point { stroke: var(--border-color); stroke-width: 2; fill: white; } .drawflow .connection .point.selected, .drawflow .connection .point:hover { fill: #4ea9ff; } /* Modal */ .modal { display: none; position: fixed; z-index: 7; left: 0; top: 0; width: 100vw; height: 100vh; overflow: auto; background-color: rgb(0,0,0); background-color: rgba(0,0,0,0.7); } .modal-content { position: relative; background-color: #fefefe; margin: 15% auto; /* 15% from the top and centered */ padding: 20px; border: 1px solid #888; width: 400px; /* Could be more or less, depending on screen size */ } /* The Close Button */ .modal .close { color: #aaa; float: right; font-size: 28px; font-weight: bold; cursor:pointer; } @media only screen and (max-width: 768px) { .modal-content { width: 80%; } } </style> <link type="text/css" rel="stylesheet" href="//repo.bfw.wiki/bfwrepo/css/all.5.15.3.css"> <link href="https://fonts.googleapis.com/css2?family=Roboto&display=swap" rel="stylesheet"> <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/sweetalert2.all.js"></script> <script src="https://unpkg.com/micromodal/dist/micromodal.min.js"></script> <header> <h2>Drawflow</h2> </header> <div class="wrapper"> <div class="col"> <div class="drag-drawflow" draggable="true" ondragstart="drag(event)" data-node="facebook"> <i class="fab fa-facebook"></i><span> Facebook</span> </div> <div class="drag-drawflow" draggable="true" ondragstart="drag(event)" data-node="slack"> <i class="fab fa-slack"></i><span> Slack recive message</span> </div> <div class="drag-drawflow" draggable="true" ondragstart="drag(event)" data-node="github"> <i class="fab fa-github"></i><span> Github Star</span> </div> <div class="drag-drawflow" draggable="true" ondragstart="drag(event)" data-node="telegram"> <i class="fab fa-telegram"></i><span> Telegram send message</span> </div> <div class="drag-drawflow" draggable="true" ondragstart="drag(event)" data-node="aws"> <i class="fab fa-aws"></i><span> AWS</span> </div> <div class="drag-drawflow" draggable="true" ondragstart="drag(event)" data-node="log"> <i class="fas fa-file-signature"></i><span> File Log</span> </div> <div class="drag-drawflow" draggable="true" ondragstart="drag(event)" data-node="google"> <i class="fab fa-google-drive"></i><span> Google Drive save</span> </div> <div class="drag-drawflow" draggable="true" ondragstart="drag(event)" data-node="email"> <i class="fas fa-at"></i><span> Email send</span> </div> <div class="drag-drawflow" draggable="true" ondragstart="drag(event)" data-node="template"> <i class="fas fa-code"></i><span> Template</span> </div> <div class="drag-drawflow" draggable="true" ondragstart="drag(event)" data-node="multiple"> <i class="fas fa-code-branch"></i><span> Multiple inputs/outputs</span> </div> <div class="drag-drawflow" draggable="true" ondragstart="drag(event)" data-node="personalized"> <i class="fas fa-fill"></i><span> Personalized</span> </div> <div class="drag-drawflow" draggable="true" ondragstart="drag(event)" data-node="dbclick"> <i class="fas fa-mouse"></i><span> DBClick!</span> </div> </div> <div class="col-right"> <div class="menu"> <ul> <li onclick="editor.changeModule('Home'); changeModule(event);" class="selected">Home</li> <li onclick="editor.changeModule('Other'); changeModule(event);">Other Module</li> </ul> </div> <div id="drawflow" ondrop="drop(event)" ondragover="allowDrop(event)"> <div class="btn-export" onclick="Swal.fire({ title: 'Export', html: '<pre><code>'+JSON.stringify(editor.export(), null,4)+'</code></pre>' })">Export</div> <div class="btn-clear" onclick="editor.clearModuleSelected()">Clear</div> <div class="btn-lock"> <i id="lock" class="fas fa-lock" onclick="editor.editor_mode='fixed'; changeMode('lock');"></i> <i id="unlock" class="fas fa-lock-open" onclick="editor.editor_mode='edit'; changeMode('unlock');" style="display:none;"></i> </div> <div class="bar-zoom"> <i class="fas fa-search-minus" onclick="editor.zoom_out()"></i> <i class="fas fa-search" onclick="editor.zoom_reset()"></i> <i class="fas fa-search-plus" onclick="editor.zoom_in()"></i> </div> </div> </div> </div> <script> var id = document.getElementById("drawflow"); const editor = new Drawflow(id); editor.reroute = true; const dataToImport = {"drawflow":{"Home":{"data":{"1":{"id":1,"name":"welcome","data":{},"class":"welcome","html":"\n <div>\n <div class=\"title-box\">👏 Welcome!!</div>\n <div class=\"box\">\n <p>Simple flow library <b>demo</b>\n <a href=\"https://github.com/jerosoler/Drawflow\" target=\"_blank\">Drawflow</a> by <b>Jero Soler</b></p><br>\n\n <p>Multiple input / outputs<br>\n Data sync nodes<br>\n Import / export<br>\n Modules support<br>\n Simple use<br>\n Type: Fixed or Edit<br>\n Events: view console<br>\n Pure Javascript<br>\n </p>\n <br>\n <p><b><u>Shortkeys:</u></b></p>\n <p>🎹 <b>Delete</b> for remove selected<br>\n 💠 Mouse Left Click == Move<br>\n ❌ Mouse Right == Delete Option<br>\n 🔍 Ctrl + Wheel == Zoom<br>\n 📱 Mobile support<br>\n ...</p>\n </div>\n </div>\n ","typenode": false, "inputs":{},"outputs":{},"pos_x":50,"pos_y":50},"2":{"id":2,"name":"slack","data":{},"class":"slack","html":"\n <div>\n <div class=\"title-box\"><i class=\"fab fa-slack\"></i> Slack chat message</div>\n </div>\n ","typenode": false, "inputs":{"input_1":{"connections":[{"node":"7","input":"output_1"}]}},"outputs":{},"pos_x":1028,"pos_y":87},"3":{"id":3,"name":"telegram","data":{"channel":"channel_2"},"class":"telegram","html":"\n <div>\n <div class=\"title-box\"><i class=\"fab fa-telegram-plane\"></i> Telegram bot</div>\n <div class=\"box\">\n <p>Send to telegram</p>\n <p>select channel</p>\n <select df-channel>\n <option value=\"channel_1\">Channel 1</option>\n <option value=\"channel_2\">Channel 2</option>\n <option value=\"channel_3\">Channel 3</option>\n <option value=\"channel_4\">Channel 4</option>\n </select>\n </div>\n </div>\n ","typenode": false, "inputs":{"input_1":{"connections":[{"node":"7","input":"output_1"}]}},"outputs":{},"pos_x":1032,"pos_y":184},"4":{"id":4,"name":"email","data":{},"class":"email","html":"\n <div>\n <div class=\"title-box\"><i class=\"fas fa-at\"></i> Send Email </div>\n </div>\n ","typenode": false, "inputs":{"input_1":{"connections":[{"node":"5","input":"output_1"}]}},"outputs":{},"pos_x":1033,"pos_y":439},"5":{"id":5,"name":"template","data":{"template":"Write your template"},"class":"template","html":"\n <div>\n <div class=\"title-box\"><i class=\"fas fa-code\"></i> Template</div>\n <div class=\"box\">\n Ger Vars\n <textarea df-template></textarea>\n Output template with vars\n </div>\n </div>\n ","typenode": false, "inputs":{"input_1":{"connections":[{"node":"6","input":"output_1"}]}},"outputs":{"output_1":{"connections":[{"node":"4","output":"input_1"},{"node":"11","output":"input_1"}]}},"pos_x":607,"pos_y":304},"6":{"id":6,"name":"github","data":{"name":"https://github.com/jerosoler/Drawflow"},"class":"github","html":"\n <div>\n <div class=\"title-box\"><i class=\"fab fa-github \"></i> Github Stars</div>\n <div class=\"box\">\n <p>Enter repository url</p>\n <input type=\"text\" df-name>\n </div>\n </div>\n ","typenode": false, "inputs":{},"outputs":{"o.........完整代码请登录后点击上方下载按钮下载查看
网友评论0