@vitkuz573

Как получить значения left и top (Vue)?

Имеется следующий компонент:
<template>
  <div ref="draggableContainer" id="draggable-container" @mousedown="dragMouseDown">
      <slot/>
  </div>
</template>

<script setup>
import { ref } from "vue";

const draggableContainer = ref()

const positions = ref({
    clientX: ref(undefined),
    clientY: ref(undefined),
    movementX: ref(0),
    movementY: ref(0),
})

const dragMouseDown = (event) => {
    event.preventDefault()
    positions.value.clientX = event.clientX
    positions.value.clientY = event.clientY
    document.onmousemove = elementDrag
    document.onmouseup = closeDragElement
}

const elementDrag = (event) => {
    event.preventDefault()
    positions.value.movementX = positions.value.clientX - event.clientX
    positions.value.movementY = positions.value.clientY - event.clientY
    positions.value.clientX = event.clientX
    positions.value.clientY = event.clientY
    draggableContainer.value.style.top = (draggableContainer.value.offsetTop - positions.value.movementY) + 'px'
    draggableContainer.value.style.left = (draggableContainer.value.offsetLeft - positions.value.movementX) + 'px'
}

const closeDragElement = () => {
    document.onmouseup = null
    document.onmousemove = null
}
</script>

<style>
#draggable-container {
  position: absolute;
  z-index: 10;
}
</style>


Он применяется в другом компоненте примерно так:
<DraggableDiv :style="{ left: element.attributes.coordinates.left + 'px', top: element.attributes.coordinates.top + 'px' }">
    <a :href="element.attributes.url">
        <img :src="'/storage/icons/' + element.attributes.icon" :alt="element.attributes.name" class="w-14"/>
    </a>
    <span v-text="element.attributes.name"/>
</DraggableDiv>


Нужно по событию @mouseup получить и зафиксировать новые значения left и top.

Надеюсь понятно сформулировал вопрос. Как это можно сделать?
  • Вопрос задан
  • 89 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы