Skip to content

Instantly share code, notes, and snippets.

@seejee
Created February 26, 2014 16:22
Show Gist options
  • Save seejee/9232924 to your computer and use it in GitHub Desktop.
Save seejee/9232924 to your computer and use it in GitHub Desktop.
# Example Usage:
# $('#facey').draggable({
# droppables: '.droppable',
# onDrop: function (droppable) {
# $('#facey').text('DROPPED');
# },
# onNoDrop: function (originalOffset) {
# $('#facey').offset(originalOffset);
# },
# onHover: function(droppable) {
# droppable.addClass('dropHover');
# },
# onNoHover: function() {
# $('.droppable').removeClass('dropHover');
# }
# });
$ ->
centerOf = ($e) ->
offset = $e.offset()
width = $e.width()
height = $e.height()
{
x: offset.left + width / 2
y: offset.top + height / 2
}
isPointInElement = (point, $e) ->
offset = $e.offset()
width = $e.width()
height = $e.height()
top = offset.top
left = offset.left
(point.x > left && point.x < (left + width)) && (point.y > top && point.y < (top + height))
findDroppablesUnderPoint = (selector, point) ->
$(selector).filter ->
isPointInElement point, $(this)
findDroppablesUnderElement = (selector, element) ->
findDroppablesUnderPoint selector, centerOf($(element))
defineDraggableJquery = (Draggabilly) ->
$.fn.draggable = (options) ->
return if @length < 1
originalOffset = 0
d = new Draggabilly this[0]
d.on('dragStart', (draggie, event, pointer) ->
originalOffset = $(draggie.element).offset()
d.on('dragMove', (draggie, event, pointer) ->
droppables = findDroppablesUnderElement options.droppables, draggie.element
if (droppables.length > 0)
options.onHover droppables
else
options.onNoHover()
d.on('dragEnd', (draggie, event, pointer) ->
droppables = findDroppablesUnderElement options.droppables, draggie.element
if droppables.length > 0
options.onDrop(droppables)
else
options.onNoDrop(originalOffset)
if ( typeof define is 'function' && define.amd )
# AMD
define ['draggabilly'], defineDraggableJquery
else
defineDraggableJquery window.Draggabilly
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment