Вот мой пример
http://pastehtml.com/view/c6ix3o7f1.html, все работает, но:
1) если у блока задан маргин, неправильно определяется положение блока относительно курсора, мое решение такое:
function getComputedStyleProperty(el, prop) {
return window.getComputedStyle(el, null).getPropertyValue(prop);
}
function makeDraggable(el) {
var drag, dx, dy;
el.style.position = 'absolute';
el.style.cursor = 'move';
el.onmousedown = function(e) {
var pos = findPosition(this);
dx = pos[0] - e.clientX - parseInt(getComputedStyleProperty(this, 'margin-left'));
dy = pos[1] - e.clientY - parseInt(getComputedStyleProperty(this, 'margin-top'));
this.style.zIndex = maxZindex++;
drag = true;
}
document.addEventListener('mouseup', function() {drag = false}, false);
document.addEventListener('mousemove', function(e) {
if (drag) {
el.style.left = e.clientX + dx + 'px';
el.style.top = e.clientY + dy + 'px';
}
}, false);
}
Но как быть со значениями в em, pt?
2) Покритикуйте код