• 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();
      }
     }

  • 相关阅读:
    计算机技术与软件专业以考代评政策之我见
    关于设立运营部门的我的几点建议
    自助式微软BI工具PowerPivot简介!
    写在两年前的公司新版CRM系统需求探讨
    实时音视频开发之开源项目
    vue3.0 使用vue脚手架生成vue项目 运行mapbox 3D地图例子
    Vue开发工具Visual Studio Code 配置插件
    sip协议开源实现
    redis操作
    SIP协议 Java开源jar
  • 原文地址:https://www.cnblogs.com/CoffeeHome/p/3547516.html
Copyright © 2020-2023  润新知