1.https://bitqiang.gitbooks.io/jsplumb/content/Chapter1_IMPORTS_AND_SETUP/ ——— 一个翻译一半就不能打开的文档css
2.https://github.com/wangduanduan/jsplumb-chinese-tutorial ——— 一个事件方法很全的网站(推荐)html
3.https://wdd.js.org/jsplumb-chinese-tutorial/#/ ——— 一个事件方法很全的网站(同上)vue
4.http://www.javashuo.com/article/p-wvyhfmyn-ga.html ————— jq ui 拖动node
版本:2.13.3react
库:https://github.com/jsplumb/jsplumbgit
连接:https://pan.baidu.com/s/1EvftCI5gXRvoL6pNRenSpQ github
提取码:z2t4npm
React vue : npm i jsplumbapp
注意:低版本须要引用jq 以及jq-ui,此版本不须要dom
let idePageJsPlumstance=’’; //初始化 componentDidMount() { idePageJsPlumstance = jsPlumb.getInstance() //关键函数 注册jsplumb实例 idePageJsPlumstance.setContainer ('flow-main')//设置面板 }, //离开 componentWillUnmount() { if (idePageJsPlumstance) { idePageJsPlumstance.clear() //清空 } },
//给span注册拖动事件 $('#flow-btns').find('span').draggable({ helper: 'clone',//拖动样式 zIndex: 11, scope: 'flowMainCanvas',//关键参数 })
Scope //关键参数,被拖动子菜单和拖动到面板要对应相同
//样式 let endAllPointStyle={ endpoint: 'Dot', //端点的形状 isSource: true, //是否能够拖动(做为连线起点) isTarget: true, //是否能够放置(连线终点) }
//画图 $('#flow-main').droppable ({ scope: 'flowMainCanvas', drop: function ( event, ui ) { let left = parseInt ( ui.offset.left) let top = parseInt ( ui.offset.top) let id = ‘node12’ let dom = “<span id=’+id+’ >’+ui.helper.context.dataset.text+’</span>” $ (this).append (dom) dom.css ('left', left).css ('top', top) idePageJsPlumstance.addEndpoint ( id, { anchor:"LeftMiddle" }, endAllPointStyle) //注册端点拖桶 idePageJsPlumstance.draggable ( id) //注册节点拖动 $ ('#' + id).draggable ({ containment:"parent", }) } })
//链接线的右键单击事件 idePageJsPlumstance.bind ('contextmenu', function ( conn, e ) { e.preventDefault () e.stopPropagation () ///// .... }) //链接线的单击事件 idePageJsPlumstance.bind ('mousedown', function ( conn, e ) { ///// .... }) //开始拖动新链接时 idePageJsPlumstance.bind ('beforeDrag', function ( info ) { ///// .... }) // 结束拖动新链接时 idePageJsPlumstance.bind ('beforeDrop', function ( info ) { ///// .... } // 链接事件 注册线的参数 idePageJsPlumstance.bind ('connection', function ( info ) { ///// ... }) // 开始拖动现有链接 idePageJsPlumstance.bind('beforeStartDetach',function (conn) { ///// .... }) //页面线的dom const connectors =idePageJsPlumstance.getAllConnections () //删除点,线 节点 idePageJsPlumstance.detach(con) idePageJsPlumstance.remove(id) idePageJsPlumstance.removeAllEndpoints(id)
a . 储存的话,先将拖动的新增节点信息保存,好比left 、id、 top 固定信息保存
再将线保存 线有五个参数 经过遍历idePageJsPlumstance.getAllConnections() //线数据获取,保存线的id、 sourceId、targetId 还有点锚点的起止位置参数
b . 从新代码生成 还原节点后
idePageJsPlumstance.ready (function () { idePageJsPlumstance.connect ({ source: startKey, target:endKe, anchors: [sourcepoint, item.targetpoint ], endpoint: 'Dot', isSource: true, isTarget: true, }) })
再注册相应的拖拽事件