Ебалайтен блин, все работает, вот так делается, то есть все что надо заранее определить - определяется, а потом уже выполняется.
var con=null,
activeElement,
offsetX = 0,
offsetY = 0,
mDown = function(e){
console.log('Нажали кнопку мыши',e)
activeElement = e.target;
offsetX = e.offsetX
offsetY = e.offsetY
},
mUp = function(e){
console.log('Отпустили кнопку мыши')
activeElement = null
},
mMove = function(e){
if(activeElement) {
activeElement.style.top = (e.clientY - offsetY) + 'px'
activeElement.style.left = (e.clientX - offsetX) + 'px'
}
};
function div(){
con=mk_div('con');
con.addEventListener('mousedown', mDown);
con.addEventListener('mouseup', mUp);
document.addEventListener('mousemove', mMove);
}
function mk_div(rule){
var div = document.createElement('div'),
style=div.style;
style.width='100px';
style.height='100px';
style.backgroundColor="green";
div.className=rule;
return document.body.insertBefore(div, document.body.firstChild)
}
btn.onclick = div;