|
|
1 year ago | |
|---|---|---|
| .. | ||
| dist | 1 year ago | |
| LICENSE | 1 year ago | |
| README.md | 1 year ago | |
| package.json | 1 year ago | |
A plugin for the svgdotjs.github.io library to make elements draggable.
Svg.draggable.js is licensed under the terms of the MIT License.
Install the plugin:
bower install svg.draggable.js
Include this plugin after including the svg.js library in your html document.
<script src="svg.js"></script>
<script src="svg.draggable.js"></script>
To make an element draggable just call draggable() in the element
var draw = SVG('canvas').size(400, 400)
var rect = draw.rect(100, 100)
rect.draggable()
Yes indeed, that’s it! Now the rect is draggable.
The Plugin fires 4 different events
You can bind/unbind listeners to this events:
// bind
rect.on('dragstart.namespace', function(event){
// event.detail.event hold the given data explained below
})
// unbind
rect.off('dragstart.namespace')
beforedrag, dragstart, dragmove and dragend gives you the event and the handler which calculates the drag.
Except for beforedrag the events also give you:
detail.m transformation matrix to calculate screen coords to coords in the elements userspacedetail.p pageX and pageY transformed into the elements userspaceYou can prevent the default action of beforedrag and dragmove with a call to event.preventDefault() in the callback function.
The shape won’t be dragged in this case. That is helpfull if you want to implement your own drag handling.
rect.draggable().on('beforedrag', function(e){
e.preventDefault()
// no other events are bound
// drag was completely prevented
})
rect.draggable().on('dragmove', function(e){
e.preventDefault()
this.move(e.detail.p.x, e.detail.p.y)
// events are still bound e.g. dragend will fire anyway
})
The drag functionality can be limited within a given box. You can pass the the constraint values as an object:
rect.draggable({
minX: 10
, minY: 15
, maxX: 200
, maxY: 100
, snapToGrid: 20
})
For more dynamic constraints a function can be passed as well:
rect.draggable(function(x, y) {
return { x: x < 1000, y: y < 300 }
})
Note that every constraint given is evaluated in the elements coordinate system and not in the screen-space
The draggable functionality can be removed calling draggable again with false as argument:
rect.draggable(false)
This module requires svg.js >= v2.0.1