Хорошее замечание
function makeDraggable(el, dragOptions) {
var drag, dx, dy;
el.addEventListener('mousedown', function(e) {
var position = getPosition(this);
// тут еще остались маргины, как от них избавиться?
dx = position.left - e.clientX - parseInt(getStyle(this, 'margin-left'));
dy = position.top - e.clientY - parseInt(getStyle(this, 'margin-top'));
this.style.zIndex = maxZindex++;
if (dragOptions.start) {
dragOptions.start();
}
drag = true;
}, false);
document.addEventListener('mousemove', function(e) {
if (drag) {
el.style.left = e.clientX + dx + 'px';
el.style.top = e.clientY + dy + 'px';
if (dragOptions.drag) {
dragOptions.drag();
}
}
}, false);
document.addEventListener('mouseup', function() {
if (drag) {
if (dragOptions.end) {
dragOptions.end();
}
drag = false;
}
}, false);
}
function collisionDetection(x1, y1, w1, h1, x2, y2, w2, h2) {
return x1 < (x2 + w2) && y1 < (y2 + h2) && (x1 + w1) > x2 && (y1 + h1) > y2;
}
function isCollide(a, b) {
var p1 = getPosition(a);
var p2 = getPosition(b);
return collisionDetection(p1.left, p1.top, a.offsetWidth, a.offsetHeight,
p2.left, p2.top, b.offsetWidth, b.offsetHeight);
}