Переглянути джерело

chore(demo): add demo to show graph state

yilin.qyl 6 роки тому
батько
коміт
bd2d9572a1
1 змінених файлів з 128 додано та 0 видалено
  1. 128 0
      demos/dynamic-add.html

+ 128 - 0
demos/dynamic-add.html

@@ -0,0 +1,128 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+</head>
+<body>
+<select id="selector">
+  <option value="default">默认</option>
+  <option value="addNode">添加节点</option>
+  <option value="addEdge">添加边</option>
+</select>
+<div id="mountNode"></div>
+<script src="../build/g6.js"></script>
+<script>
+  // 封装点击添加边的交互
+  G6.registerBehavior('click-add-edge', {
+    getEvents() {
+      return {
+        'node:click': 'onClick' ,
+        mousemove: 'onMousemove',
+        'edge:click': 'onEdgeClick' // 点击空白处,取消边
+      };
+    },
+    onClick(ev) {
+      const node = ev.item;
+      const graph = this.graph;
+      const point = {x: ev.x, y: ev.y};
+      const model = node.getModel();
+      if (this.addingEdge && this.edge) {
+        graph.updateItem(this.edge, {
+          target: model.id
+        });
+        // graph.setItemState(this.edge, 'selected', true);
+        this.edge = null;
+        this.addingEdge = false;
+      } else {
+        this.edge = graph.addItem('edge', {
+          source: model.id,
+          target: point
+        });
+        this.addingEdge = true;
+      }
+    },
+    onMousemove(ev) {
+      const point = {x: ev.x, y: ev.y};
+      if (this.addingEdge && this.edge) {
+        this.graph.updateItem(this.edge, {
+          target: point
+        });
+      }
+    },
+    onEdgeClick(ev) {
+      const currentEdge = ev.item;
+      // 拖拽过程中,点击会点击到新增的边上
+      if (this.addingEdge && this.edge == currentEdge) {
+        graph.removeItem(this.edge);
+        this.edge = null;
+        this.addingEdge = false;
+      }
+    }
+  });
+
+  // 封装点击添加边的交互
+  G6.registerBehavior('click-add-node', {
+    getEvents() {
+      return {
+        'canvas:click': 'onClick'
+      };
+    },
+    onClick(ev) {
+      const graph = this.graph;
+      const node = graph.addItem('node', {
+        x: ev.x,
+        y: ev.y,
+        id: G6.Util.uniqueId()
+      });
+      // graph.setItemState(node, 'selected', true);// 添加后默认选中
+    }
+  });
+
+
+  const data = {
+    nodes: [{
+      id: 'node1',
+      x: 100,
+      y: 200
+    },{
+      id: 'node2',
+      x: 300,
+      y: 200
+    },{
+      id: 'node3',
+      x: 300,
+      y: 300
+    }],
+    edges: [{
+      id: 'edge1',
+      target: 'node2',
+      source: 'node1'
+    }]
+  };
+
+  const graph = new G6.Graph({
+    container: 'mountNode',
+    width: 500,
+    height: 500,
+    modes: {
+      default: ['drag-node', 'click-select'],
+      addNode: ['click-add-node', 'click-select'],
+      addEdge: ['click-add-edge', 'click-select']
+    }
+  });
+
+  graph.data(data);
+  graph.render();
+  graph.on('graphstatechange', e => {
+    console.log(e);
+  });
+
+  document.getElementById('selector').addEventListener('change', e => {
+    const value = e.target.value;
+    graph.setMode(value);
+  });
+
+</script>
+</body>
+</html>