Draggable
Draggable component for VueJS 2+ which implements @dragndrop/draggable component.
Design & API Documentation
Installation
npm install @dragndrop/vue-draggable
Usage
Draggable element can be used for different functionalities - from moving elements around to make sortable list or draggable grid elements.
Typescript support
Component has its declarations (*.d.ts) for Typescript available.
Registration
import {VueDraggable} from '@dragndrop/vue-draggable';
Vue.component('VueDraggable', VueDraggable);
Registration as plugin
import Vue from 'vue';
import VueDraggable from '@dragndrop/vue-draggable';
Vue.use(VueDraggable);
Simple example
<template>
<VueDraggable
:data="dataTransfer"
:avatar="avatar"
@onDrag="onDrag"
>
<div>Example element</div>
</VueDraggable>
</template>
<script>
export default {
data() {
return {
dataTransfer: 'example data',
avatar: new Avatar.clone(),
}
},
methods: {
onDrag(event) {
console.log(event.dragInfo.data);
}
}
}
</script>
CSS Classes (they can be changed)
| CSS Class |
Description |
draggable--dragging |
Sets this class to element when dragging |
draggable--occurring |
Sets this class to body element when dragging |
Shadow DOM
If you want to use dragndrop in Shadow DOM you need to add draggable--retarget attribute to your host element so events will be bubble through Shoadow DOM and recursive elementFromPoint() calls will work correctly.
Events
| Events |
Type |
Data |
Description |
onDragStart |
CustomEvent |
{originalEvent, dragInfo, dropzoneElement} |
Event dispatched when dragging starts |
onDrag |
CustomEvent |
{originalEvent, dragInfo, dropzoneElement} |
Event dispatched when dragging |
onDragEnd |
CustomEvent |
{originalEvent, dragInfo, dropzoneElement} |
Event dispatched when dragging ends |
DragInfo
| DragInfo |
Type |
Description |
draggableId |
Number |
Id of draggable element |
element |
Element |
Draggable element |
data |
Type Generic |
Data attached to draggable with data property |
startPosition |
Point |
Start position |
avatar |
Avatar |
Avatar attached to draggable with avatar property |
axis |
Axis |
Axis which dragging is handled 'horizontal', 'vertical' and 'both' |
position |
Point |
Current position of cursor |
shift |
Point |
Distance from start position to elements top-left corner |
Props
| Property |
Value Type |
Description |
data |
Generic Type |
Data which is attached to draggable |
draggable |
Boolean |
Turn on / off draggable functionality |
avatar |
Avatar |
Element which is rendered when element is dragging |
axis |
Axis ('both', 'horizontal', 'vertical') |
Axis the dragging is available for |
handle |
String |
Selector on which dragging is available (children of element are included) |
cancel |
String |
Selectors on which draggins is not available (children of element are included) |
draggingClass |
String |
Class which is set on element when dragging (draggable--dragging default) |
draggingClassBody |
String |
Class which is set on body element when dragging (draggable--occurring default) |
minDragStartDistance |
number |
Min distance to start dragStart state (4 default) |
touchAction |
String or null |
Makes touch-action property set on element when drag is started (undefined default) |
customScroll |
((startPosition: Point, currentPosition: Point) => void) or boolean |
Allows to specify customScroll behavior with function or when set with false prevents from custom scroll which is set by default |
Methods
| Method Signature |
Description |
abort() => void |
Aborts current dragging |
destroy() => void |
Clean up method. Is used on beforeDestroy hook. |