Browse Source

drag nodes

zhangyuanlian 6 years ago
parent
commit
e031659bcc
1 changed files with 32 additions and 13 deletions
  1. 32 13
      src/components/Graph.vue

+ 32 - 13
src/components/Graph.vue

@@ -4,7 +4,7 @@
       @drop="addNode"
       @dragover.prevent
     >
-      <svg width="100%" height="418">
+      <svg width="100%" height="418" @mousemove="nodeMousemove($event)">
         <defs>
           <marker id="end-arrow" viewBox="0 -5 10 10" refX="42" markerWidth="5" markerHeight="5" orient="auto">
             <path d="M0,-5 L10,0 L0,5"></path>
@@ -31,7 +31,8 @@
                :key="node.id"
                :class="['conceptG', {selected: node.selected}]"
                :transform="'translate('+node.x+','+node.y+')'"
-               @click="clickNode(node)"
+               @mousedown="nodeMousedown(node)"
+               @mouseup="nodeMouseup"
             >
               <circle r="34"></circle>
               <text text-anchor="middle">
@@ -47,21 +48,25 @@
 
 <script>
 var nodeId = 3
+var testNodes = [
+  {id: 1, name: '普通活动', x: 200, y: 200, selected: false},
+  {id: 2, name: '普通活动', x: 300, y: 300, selected: false}
+]
+var testEdges = [
+  {id: 1, source: testNodes[0], target: testNodes[1], selected: false}
+]
 export default {
   data () {
     return {
-      nodes: [
-        {id: 1, name: '普通活动', x: 200, y: 200, selected: false},
-        {id: 2, name: '普通活动', x: 300, y: 300, selected: false}
-      ],
-      edges: [
-        {id: 1, source: {x: 200, y: 200}, target: {x: 300, y: 300}, selected: false}
-      ],
-      selectedEdge: false
+      nodes: testNodes,
+      edges: testEdges,
+      mousedownNode: null,
+      mousedownEdge: null,
+      selectedNode: null,
+      selectedEdge: null
     }
   },
-  computed: {
-  },
+  computed: {},
   props: {
     isDragging: {
       type: Boolean,
@@ -98,13 +103,27 @@ export default {
       this.unSelectedNodes()
       this.unSelectedEdges()
     },
-    clickNode: function (node) {
+    nodeMousedown: function (node) {
       this.unSelectedAll()
       node.selected = !node.selected
+      this.mousedownNode = node
+    },
+    nodeMousemove: function (e) {
+      var node = this.mousedownNode
+      if (node) {
+        node.x = node.x + e.movementX
+        node.y = node.y + e.movementY
+      }
+    },
+    nodeMouseup: function () {
+      this.mousedownNode = null
     },
     clickEdge: function (edge) {
       this.unSelectedAll()
       edge.selected = !edge.selected
+    },
+    dragstart: function (node) {
+      console.log(node)
     }
   }
 }