Skip to content

Instantly share code, notes, and snippets.

@StephanHoyer
Created April 30, 2015 08:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save StephanHoyer/139129280d952071e727 to your computer and use it in GitHub Desktop.
Save StephanHoyer/139129280d952071e727 to your computer and use it in GitHub Desktop.
'use strict';
var bus = require('./bus');
var throttle = require('lodash/function/throttle');
function getOffsetX(event) {
return event.offsetX || event.layerX;
}
function getOffsetY(event) {
return event.offsetY || event.layerY;
}
function dragdrop(el) {
var offsetX = 0;
var offsetY = 0;
var throttledDragMove;
function onDragMove(transport) {
throttledDragMove = throttle(function(event) {
event.relativeOffsetX = getOffsetX(event) - offsetX;
event.relativeOffsetY = getOffsetY(event) - offsetY;
bus.onDragOver.dispatch(event, transport);
bus.onDragMove.dispatch(event, transport);
}, 10);
return throttledDragMove;
}
function onDragEnd(transport) {
var mouseUpHandler = function(event) {
event.relativeOffsetX = getOffsetX(event) + offsetX;
event.relativeOffsetY = getOffsetY(event) + offsetY;
el.removeEventListener('mousemove', throttledDragMove);
el.removeEventListener('mouseup', mouseUpHandler);
offsetX = 0;
offsetY = 0;
bus.onDragEnd.dispatch(event, transport);
};
return mouseUpHandler;
}
function onDragStart(transport, event) {
if (event) {
offsetX = getOffsetX(event);
offsetY = getOffsetY(event);
}
el.addEventListener('mousemove', onDragMove(transport));
el.addEventListener('mouseup', onDragEnd(transport));
}
bus.onDragStart.add(onDragStart);
}
module.exports = dragdrop;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment