Vue Component for draggable and resizable elements.
Not available for now
- A lightweight, no-dependency
- All props are reactive
- Support touch events
- Use
- draggable
- resizable
- rotable
- or all of them
- Define sticks for resizing
- Define sticks for rotation
- Restrict size and movement to parent element
- Restrict drag to vertical or horizontal axis
- Handle draggable areas
- Resizable and draggable even with a defined angle
$ npm i -s vue-drag-resize-and-rotate
Register the component:
import Vue from 'vue'
import VueDragResizeAndRotate from 'vue-drag-resize-and-rotate'
Vue.component('vue-drag-resize-and-rotate', VueDragResizeAndRotate)
Use the component:
<template>
<div id="app">
<VueDragResizeAndRotate :active="true" :w="200" :h="200" @resizing="change" @dragging="change" @rotating="change" :rotate="true">
<h3>Hello World!</h3>
<p>{{ y }} Ń… {{ x }} </p>
<p>{{ w }} Ń… {{ h }}</p>
</VueDragResizeAndRotate>
</div>
</template>
<script>
import VueDragResizeAndRotate from 'vue-drag-resize-and-rotate';
export default {
name: 'app',
components: {
VueDragResizeAndRotate
},
data() {
return {
w: 0,
h: 0,
x: 0
y: 0,
}
},
methods: {
change(newRect) {
this.w = newRect.w;
this.h = newRect.h;
this.x = newRect.x;
this.y = newRect.y;
}
}
}
</script>
Type: Boolean
Required: false
Default: false
Determines whether the component should be active.
<VueDragResizeAndRotate :active="true">
Type: Boolean
Required: false
Default: true
Determines whether the component should be draggable.
<VueDragResizeAndRotate :draggable="false">
Type: Boolean
Required: false
Default: true
Determines whether the component should be resizable.
<VueDragResizeAndRotate :resizable="false">
Type: Array
Required: false
Default: [0, 0]
Determines pixel distance beetween each drag
<VueDragResizeAndRotate :grid="[10, 10]">
Type: Object
Required: false
Default: undefined
Limits the scope of the component's change to its parent size. Variable parameters can be set (none of them are required):
- parent:
Boolean
- top:
Number
- right:
Number
- bottom:
Number
- left:
Number
<VueDragResizeAndRotate :bounds="{parent: true}">
<VueDragResizeAndRotate :bounds="{top: -100, bottom: 100}">
<VueDragResizeAndRotate :bounds="{top: -100, right: 100, bottom: 100, left: -100}">
Type: Number
Required: false
Default: 200
Define the initial width of the component.
<VueDragResizeAndRotate :w="500">
Type: Number
Required: false
Default: 200
Define the initial height of the component.
<VueDragResizeAndRotate :h="500">
Type: Number
Required: false
Default: 0
Define the initial x position of the component.
<VueDragResizeAndRotate :x="500">
Type: Number
Required: false
Default: 0
Define the initial y position of the component.
<VueDragResizeAndRotate :y="500">
Type: Number
Required: false
Default: 0
Define the initial rotation angle in degrees of the component.
<VueDragResizeAndRotate :r="45">
Type: Array
Required: false
Default: ['tl', 'tm', 'tr', 'mr', 'br', 'bm', 'bl', 'ml', 'ro']
Define the array of handles to restrict the element resizing:
tl
- Top lefttm
- Top middletr
- Top rightmr
- Middle rightbr
- Bottom rightbm
- Bottom middlebl
- Bottom leftml
- Middle leftro
- Rotation stick
<VueDragResizeAndRotate :sticks="['tm','bm','ml','mr']">
<VueDragResizeAndRotate :sticks="['ro']">
Type: String
Required: false
Default: xy
Define the axis on which the element is draggable. Available values are x
, y
, xy
. Other values are equivalent to none
<VueDragResizeAndRotate axis="x">
Type: String
Required: false
Default: undefined
Defines the selector that should be used to drag the component.
<VueDragResizeAndRotate dragHandle=".drag">
Type: String
Required: false
Default: undefined
Defines a selector that should be used to prevent drag initialization.
<VueDragResizeAndRotate dragCancel=".drag">
Type: String
Required: false
Default: undefined
Defines a selector that should be used to prevent drag initialization.
<VueDragResizeAndRotate dragCancel=".drag">
Required: false
Parameters: -
Called whenever the component gets clicked.
<VueDragResizeAndRotate @activated="onActivated">
Required: false
Parameters: -
Called whenever the component gets clicked, in order to show handles.
<VueDragResizeAndRotate @activated="onActivated">
Required: false
Parameters: -
Called whenever the user clicks anywhere outside the component, in order to deactivate it.
<VueDragResizeAndRotate @deactivated="onDeactivated">
Required: false
Parameters: object
{
left: Number, //the X position of the component
top: Number, //the Y position of the component
width: Number, //the width of the component
height: Number //the height of the component
}
Called whenever the component gets resized.
<VueDragResizeAndRotate @resizing="onResizing">
Required: false
Parameters: object
{
left: Number, //the X position of the component
top: Number, //the Y position of the component
width: Number, //the width of the component
height: Number //the height of the component
}
Called whenever the component stops getting resized.
<VueDragResizeAndRotate @resizestop="onResizstop">
Required: false
Parameters: object
{
left: Number, //the X position of the component
top: Number, //the Y position of the component
width: Number, //the width of the component
height: Number //the height of the component
}
Called whenever the component gets dragged.
<VueDragResizeAndRotate @dragging="onDragging">
Required: false
Parameters: object
{
left: Number, //the X position of the component
top: Number, //the Y position of the component
width: Number, //the width of the component
height: Number //the height of the component
}
Called whenever the component stops getting dragged.
<VueDragResizeAndRotate @dragstop="onDragstop">
Any contribution to the code or any part of the documentation and any idea and/or suggestion are very welcome.
# serve with hot reload at localhost:8081
npm run start
# distribution build
npm run build