Vue directive plugin for drag event detection.
NOTE: This directive listens for mouse/touch events, and sets a handler for when a drag action is detected. This is different from setting draggable
on element, in that you need to move the element yourself according to the information v-dragged
provides.
npm install --save v-dragged
import Vue from 'vue'
import VDragged from 'v-dragged'
Vue.use(VDragged)
In your component:
<div v-dragged="onDragged"></div>
{
// ...other options omitted
methods: {
onDragged({ el, deltaX, deltaY, offsetX, offsetY, clientX, clientY, first, last }) {
if (first) {
this.isDragging = true
return
}
if (last) {
this.isDragging = false
return
}
var l = +window.getComputedStyle(el)['left'].slice(0, -2) || 0
var t = +window.getComputedStyle(el)['top'].slice(0, -2) || 0
el.style.left = l + deltaX + 'px'
el.style.top = t + deltaY + 'px'
}
}
}
The argument passed to the event handler is an object containing the following properties:
el
first
last
deltaX
undefined
when first
or last
is true
.deltaY
undefined
when first
or last
is true
.offsetX
undefined
when first
or last
is true
.offsetY
undefined
when first
or last
is true
.clientX
clientY
prevent
touchstart
, touchmove
, touchend
, mousedown
, mousemove
, mouseup
).<div v-dragged.prevent="onDragged"></div>