mxGraph学习笔记--设置节点鼠标事件 //创建显示流程图的画布
原文转自:点我
// 创建显示流程图的画布 createEdit: function() { var self = this; // 创建流程图编辑器,先检查加载图形库 JxUtil.loadJxGraph(); self.editor = new mxCanvas('public/lib/graph/config/showeditor_nav.xml'); var graph = self.editor.graph; // 设置编辑器为只读 // 由于设置setEnabled为false,分组块不能收缩了,所以采用下面的组合 graph.setCellsEditable(false); graph.setCellsSelectable(false); graph.setConnectable(false); graph.setCellsMovable(false); // 设置导航图的任务节点的鼠标与移入移出效果 var track = new mxCellTracker(graph); track.mouseMove = function(sender, me) { var cell = this.getCell(me); if (cell && self.isTask(cell)) { // 设置鼠标为样式为手状 me.getState().setCursor('pointer'); if (this.cur_cell == null) { this.cur_cell = cell; // 设置鼠标移入节点效果 self.moveNode(cell, true); } } else { // 设置鼠标移出节点效果 self.moveNode(this.cur_cell, false); this.cur_cell = null; } }; // 捕获任务节点的鼠标点击事件 graph.addListener(mxEvent.CLICK, function(sender, evt) { var cell = evt.getProperty('cell'); var nodeId = self.getTaskId(cell); if (nodeId.length > 0) { self.clickCell(self.graphId, nodeId); } }); }, // private 检查是否为任务节点 isTask: function(cell) { if (cell == null) return false; var enc = new mxCodec(); var node = enc.encode(cell); var nodetype = node.getAttribute('nodetype'); if (nodetype == 'task') { return true; } return false; }, /** * 给指定的节点设置背景色 * cell -- 当前节点 * isin -- true 表示鼠标在节点上,false 表示鼠标没在节点上 **/ moveNode: function(cell, isin) { // 为空与灰色的节点都不处理鼠标事件 if (cell == null) return; if (cell.is_disabled) return; var self = this; var model = self.editor.graph.getModel(); model.beginUpdate(); try { self.editor.graph.setCellStyles("strokeColor", isin?"#A1A1FF":"#C3D9FF", [cell]); self.editor.graph.setCellStyles("fillColor", isin?"#A1A1FF":"#C3D9FF", [cell]); } finally { model.endUpdate(); } }
作者:时来运转
大佬们好,我是Web前端菜鸟,初来乍到,想跟诸位共同学习成长;
综上是我每日闲时整理笔记,文章如有侵权请诸位及时告知我,谢谢关照!