From 48abe2b1c982525dae576f72562396e7ff41977d Mon Sep 17 00:00:00 2001 From: Julian Leucker <leuckerj@gmail.com> Date: Mon, 6 Feb 2023 13:39:17 +0100 Subject: [PATCH] Make objects draggable --- src/DragContainer.vue | 16 +++++++++++++++- src/Grid.vue | 10 ++++++++-- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/DragContainer.vue b/src/DragContainer.vue index 2f27374..14ca96c 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 4cef694..7011fd7 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() { -- GitLab