diff --git a/src/DragContainer.vue b/src/DragContainer.vue index 2f273747a277df004c695457d79d92ff80097b55..14ca96cfd80c9bd5b82c982764c3cc35a5cec72f 100644 --- a/src/DragContainer.vue +++ b/src/DragContainer.vue @@ -3,6 +3,8 @@ <slot> <div id="container"> <dl> + <dt>Key</dt> + <dd>{{ dragID }}</dd> <dt>Position</dt> <dd>{{ x }}, {{ y }}</dd> <dt>Size</dt> @@ -18,10 +20,22 @@ export default { name: "DragContainer", methods: { handleDragStart(event) { - event.dataTransfer.setData("text", event.target.id); + event.dataTransfer.setData( + "vueDrag/gridItem", + JSON.stringify( + { + key: this.dragID, + x: this.x, + y: this.y, + w: this.w, + h: this.h + } + ) + ); }, }, props: { + dragID: String, x: Number, y: Number, w: Number, diff --git a/src/Grid.vue b/src/Grid.vue index 4cef69462f1b3a4a2a5d4bff14a6fc73470e9794..7011fd74ee72f02fe2a97265fc2d2dc3e6e3e600 100644 --- a/src/Grid.vue +++ b/src/Grid.vue @@ -6,6 +6,7 @@ <DragContainer v-for="item in items" :key="item.key" + :drag-i-d="item.key" :x="item.x" :y="item.y" :w="item.w" @@ -35,8 +36,13 @@ export default { }, methods: { handleDrop(event) { - let data = event.dataTransfer.getData("text"); - event.target.appendChild(document.getElementById(data)); + let data = event.dataTransfer.getData("vueDrag/gridItem"); + let element = JSON.parse(data); + console.log(element); + this.items.splice(this.items.findIndex((i) => {return i.key === element.key}), 1); + element.x = 1 + Math.trunc(event.layerX / (event.target.offsetWidth / this.cols)); + element.y = 1 + Math.trunc(event.layerY / (event.target.offsetHeight / this.rows)); + this.items.push(element); }, }, data() {