Security News
JSR Working Group Kicks Off with Ambitious Roadmap and Plans for Open Governance
At its inaugural meeting, the JSR Working Group outlined plans for an open governance model and a roadmap to enhance JavaScript package management.
draggabilly
Advanced tools
Make that shiz draggable
Rad because it supports IE10+ and multi-touch.
Grab a packaged source file:
Install with npm: npm install draggabilly
Install with Bower: bower install draggabilly
Link directly to Draggabilly files on npmcdn.com.
<script src="https://npmcdn.com/draggabilly@2.0.0/dist/draggabilly.pkgd.min.js"></script>
<!-- or -->
<script src="https://npmcdn.com/draggabilly@2.0.0/dist/draggabilly.pkgd.js"></script>
Initialize Draggabilly as a jQuery plugin
var $draggable = $('.draggable').draggabilly({
// options...
})
Initialize Draggabilly with vanilla JS
var elem = document.querySelector('.draggable');
var draggie = new Draggabilly( elem, {
// options...
});
// or pass in selector string as first argument
var draggie = new Draggabilly( '.draggable', {
// options...
});
// if you have multiple .draggable elements
// get all draggie elements
var draggableElems = document.querySelectorAll('.draggable');
// array of Draggabillies
var draggies = []
// init Draggabillies
for ( var i=0, len = draggableElems.length; i < len; i++ ) {
var draggableElem = draggableElems[i];
var draggie = new Draggabilly( draggableElem, {
// options...
});
draggies.push( draggie );
}
.is-pointer-down
added when the user's pointer (mouse, touch, pointer) first presses down..is-dragging
added when elements starts to drag.Type: String
Values: 'x'
or 'y'
axis: 'x'
Constrains movement to horizontal or vertical axis.
Type: Element, Selector String, or Boolean
containment: '.container'
Contains movement to the bounds of the element. If true
, the container will be the parent element.
Type: Array
Values: [ x, y ]
grid: [ 20, 20 ]
Snaps the element to a grid, every x and y pixels.
Type: Selector String
handle: '.handle'
Specifies on what element the drag interaction starts.
handle
is useful for when you do not want all inner elements to be used for dragging, like inputs and forms. See back handle example on CodePen.
Bind events with jQuery with standard jQuery event methods .on()
, .off()
, and .one()
. Inside jQuery event listeners this
refers to the Draggabilly element.
// jQuery
function listener(/* parameters */) {
// get Draggabilly instance
var draggie = $(this).data('draggabilly');
console.log( 'eventName happened', draggie.position.x, draggie.position.y );
}
// bind event listener
$draggable.on( 'eventName', listener );
// unbind event listener
$draggable.off( 'eventName', listener );
// bind event listener to trigger once. note ONE not ON
$draggable.one( 'eventName', function() {
console.log('eventName happened just once');
});
Bind events with vanilla JS with .on()
, .off()
, and .once()
methods. Inside vanilla JS event listeners this
refers to the Draggabilly instance.
// vanilla JS
function listener(/* parameters */) {
console.log( 'eventName happened', this.position.x, this.position.y );
}
// bind event listener
draggie.on( 'eventName', listener );
// unbind event listener
draggie.off( 'eventName', listener );
// bind event listener to trigger once. note ONCE not ONE or ON
draggie.once( 'eventName', function() {
console.log('eventName happened just once');
});
Triggered when dragging starts and the element starts moving. Dragging starts after the user's pointer has moved a couple pixels to allow for clicks.
// jQuery
$draggable.on( 'dragStart', function( event, pointer ) {...})
// vanilla JS
draggie.on( 'dragStart', function( event, pointer ) {...})
event
- Type: Event - the original mousedown
or touchstart
eventpointer
- Type: MouseEvent or Touch - the event object that has .pageX
and .pageY
Triggered when dragging moves.
// jQuery
$draggable.on( 'dragMove', function( event, pointer, moveVector ) {...})
// vanilla JS
draggie.on( 'dragMove', function( event, pointer, moveVector ) {...})
event
- Type: Event - the original mousemove
or touchmove
eventpointer
- Type: MouseEvent or Touch - the event object that has .pageX
and .pageY
moveVector
Type: Object - How far the pointer has moved from its start position { x: 20, y: -30 }
Triggered when dragging ends.
// jQuery
$draggable.on( 'dragEnd', function( event, pointer ) {...})
// vanilla JS
draggie.on( 'dragEnd', function( event, pointer ) {...})
event
- Type: Event - the original mouseup
or touchend
eventpointer
- Type: MouseEvent or Touch - the event object that has .pageX
and .pageY
Triggered when the user's pointer (mouse, touch, pointer) presses down.
// jQuery
$draggable.on( 'pointerDown', function( event, pointer ) {...})
// vanilla JS
draggie.on( 'pointerDown', function( event, pointer ) {...})
event
- Type: Event - the original mousedown
or touchstart
eventpointer
- Type: MouseEvent or Touch - the event object that has .pageX
and .pageY
Triggered when the user's pointer moves.
// jQuery
$draggable.on( 'pointerMove', function( event, pointer, moveVector ) {...})
// vanilla JS
draggie.on( 'pointerMove', function( event, pointer, moveVector ) {...})
event
- Type: Event - the original mousemove
or touchmove
eventpointer
- Type: MouseEvent or Touch - the event object that has .pageX
and .pageY
moveVector
Type: Object - How far the pointer has moved from its start position { x: 20, y: -30 }
Triggered when the user's pointer unpresses.
// jQuery
$draggable.on( 'pointerUp', function( event, pointer ) {...})
// vanilla JS
draggie.on( 'pointerUp', function( event, pointer ) {...})
event
- Type: Event - the original mouseup
or touchend
eventpointer
- Type: MouseEvent or Touch - the event object that has .pageX
and .pageY
Triggered when the user's pointer is pressed and unpressed and has not moved enough to start dragging.
click
events are hard to detect with draggable UI, as they are triggered whenever a user drags. Draggabilly's staticClick event resolves this, as it is triggered when the user has not dragged.
// jQuery
$draggable.on( 'staticClick', function( event, pointer ) {...})
// vanilla JS
draggie.on( 'staticClick', function( event, pointer ) {...})
event
- Type: Event - the original mouseup
or touchend
eventpointer
- Type: MouseEvent or Touch - the event object that has .pageX
and .pageY
// jQuery
$draggable.draggabilly('disable')
// vanilla JS
draggie.disable()
// jQuery
$draggable.draggabilly('enable')
// vanilla JS
draggie.enable()
// jQuery
$draggable.draggabilly('destroy')
// vanilla JS
draggie.destroy()
Get the Draggabilly instance from a jQuery object. Draggabilly instances are useful to access Draggabilly properties.
var draggie = $('.draggable').data('draggabilly')
// access Draggabilly properties
console.log( 'draggie at ' + draggie.position.x + ', ' + draggie.position.y )
{ x: 20, y: -30 }
x
Integery
IntegerDraggabilly works with RequireJS.
You can require draggabilly.pkgd.js
..
requirejs( [
'path/to/draggabilly.pkgd.js',
], function( Draggabilly ) {
new Draggabilly( ... );
});
To use Draggabilly as a jQuery plugin with RequireJS and draggabilly.pkgd.js, you need to call jQuery Bridget.
// require the require function
requirejs( [ 'require', 'jquery', 'path/to/draggabilly.pkgd.js' ],
function( require, $, Draggabilly ) {
// require jquery-bridget, it's included in draggabilly.pkgd.js
require( [ 'jquery-bridget/jquery-bridget' ],
function() {
// make Draggabilly a jQuery plugin
$.bridget( 'draggabilly', Draggabilly );
// now you can use $().draggabilly()
$('.draggable').draggabilly({...})
}
);
});
Or, you can manage dependencies with Bower. Set baseUrl
to bower_components
and set a path config for all your application code.
requirejs.config({
baseUrl: 'bower_components/',
paths: { // path your your app
app: '../'
}
});
requirejs( [
'draggabilly/draggabilly',
'app/my-component.js'
], function( Draggabilly, myComp ) {
new Draggabilly( '.draggable', {...});
});
You can require Bower dependencies and use Isotope as a jQuery plugin with jQuery Bridget.
requirejs.config({
baseUrl: '../bower_components',
paths: {
jquery: 'jquery/jquery'
}
});
requirejs( [
'jquery',
'draggabilly/draggabilly',
'jquery-bridget/jquery.bridget'
],
function( $, Draggabilly ) {
// make Draggabilly a jQuery plugin
$.bridget( 'draggabilly', Draggabilly );
// now you can use $().draggabilly()
$('.draggable').draggabilly({...})
});
Draggabilly works with Browserify. Install Draggabilly with npm.
npm install draggabilly
var Draggabilly = require('draggabilly');
var draggie = new Draggabilly( '.draggable', {
// options
});
To use Draggabilly as a jQuery plugin with Browserify, you need to call jQuery Bridget.
npm install jquery-bridget
var $ = require('jquery');
require('jquery-bridget');
var Draggabilly = require('draggabilly');
// make Draggabilly a jQuery plugin
$.bridget( 'draggabilly', Draggabilly );
// now you can use $().draggabilly()
$('.draggable').draggabilly({...})
IE10+, Android 4+, iOS 6+, and all modern browsers
Use Draggabilly v1 for IE8 & 9, and Android 2.3+ support
Draggabilly is released under the MIT License. Have at it.
FAQs
make that shiz draggable
We found that draggabilly demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
At its inaugural meeting, the JSR Working Group outlined plans for an open governance model and a roadmap to enhance JavaScript package management.
Security News
Research
An advanced npm supply chain attack is leveraging Ethereum smart contracts for decentralized, persistent malware control, evading traditional defenses.
Security News
Research
Attackers are impersonating Sindre Sorhus on npm with a fake 'chalk-node' package containing a malicious backdoor to compromise developers' projects.