diff --git a/front/src/CollectionForm.vue b/front/src/CollectionForm.vue index 53607ec..40477d0 100644 --- a/front/src/CollectionForm.vue +++ b/front/src/CollectionForm.vue @@ -1,5 +1,5 @@ - + diff --git a/front/src/CollectionFormElement.vue b/front/src/CollectionFormElement.vue index 3d594af..bcbd576 100644 --- a/front/src/CollectionFormElement.vue +++ b/front/src/CollectionFormElement.vue @@ -3,13 +3,14 @@ import { ref } from 'vue' import BookListElement from './BookListElement.vue' const props = defineProps({ - isDragover: Boolean, id: Number, position: Number, book: Array, + isDragover: Boolean, + isDragoverFromAbove: Boolean, }) -const emit = defineEmits('positionchange') +const emit = defineEmits(['positionchange', 'startgrab', 'stopgrab', 'grabbing']) const vFocus = { mounted: (el) => el.focus(), @@ -18,6 +19,10 @@ const vFocus = { const isInputtingPosition = ref(false) const inputtedPosition = ref('') +const initialGrabPosition = ref(null) + +const draggedPosition = ref(null) + function onPositionInput() { if (inputtedPosition.value != '' && !isNaN(inputtedPosition.value)) { const parsedPosition = parseInt(inputtedPosition.value) @@ -32,37 +37,78 @@ function clearPositionInput() { isInputtingPosition.value = false inputtedPosition.value = '' } + +function clearGrabVariables() { + initialGrabPosition.value = null + draggedPosition.value = null +} + +function onPointerUp() { + clearGrabVariables() + emit('stopgrab') +} + +function onPointerDown(e) { + initialGrabPosition.value = e.pageY + e.preventDefault() + emit('startgrab') +} + +function onPointerMove(e) { + if (initialGrabPosition.value == null) { + return + } + e.preventDefault() + draggedPosition.value = e.pageY - initialGrabPosition.value + emit('grabbing', draggedPosition.value) +} + @@ -70,6 +116,7 @@ function clearPositionInput() { .collectionitembox { transition: ease-in-out 0.04s; display: flex; + z-index: 2; } .collectionitembox:hover { @@ -106,6 +153,7 @@ function clearPositionInput() { border-top-right-radius: var(--bulma-box-radius); border-bottom-right-radius: var(--bulma-box-radius); cursor: grab; + touch-action: none; } .positionwidget:active {