I'm extremely frustrated with this problem I'm having. I've put together a click/drag code, where when you click on a certain DOM element, it drags the specified DOM element on mouse move, then releases the elements on mouse up.
The problem I'm running into is that I'm trying to remove the event listener on the mouse up, thus the DOM elements stop moving on the mouse event. But nothing seems to work to remove the event.
Here's the code.
var cls_MouseDrag = (function(){
var obj_Element, obj_Drag, v_yPos, v_xPos = null;
function Constructor(par_ElementId, par_ElementDrag){
obj_Element = document.getElementById(par_ElementId);
obj_Drag = document.getElementById(par_ElementDrag);
obj_Element.addEventListener('mousedown', MouseDown, false);
};
function MouseDown(){
var v_offset = obj_Element.getBoundingClientRect();
v_xPos = event.clientX - v_offset.left;
v_yPos = event.clientY - v_offset.top;
document.addEventListener('mousemove', cls_MouseDrag.MouseMove);
};
function MouseUp(){
document.removeEventListener('mousemove', cls_MouseDrag.MouseMove);
};
function MouseMove(){
event.preventDefault();
obj_Drag.style.top = event.clientY - v_yPos + 'px';
obj_Drag.style.left = event.clientX - v_xPos + 'px';
};
return {
Constructor:Constructor,
MouseMove:MouseMove
};
})();
cls_MouseDrag.Constructor('file_drag','my_file');
Updated code
var cls_MouseDrag = (function(){
var v_ClickElement = null, v_DragElement = null, v_yPos = null, v_xPos = null;
function Constructor(par_ClickElementId, par_DragElementId){
document.getElementById(par_ClickElementId).addEventListener('mousedown', function () { MouseDown(par_ClickElementId, par_DragElementId) }, false);
}
function MouseDown(par_ClickElementId, par_DragElementId){
v_ClickElement = document.getElementById(par_ClickElementId);
v_DragElement = document.getElementById(par_DragElementId);
var v_offset = v_ClickElement.getBoundingClientRect();
v_xPos = event.clientX - v_offset.left;
v_yPos = event.clientY - v_offset.top;
document.addEventListener('mouseup', MouseUp, false);
document.addEventListener('mousemove', MouseMove, false);
}
function MouseUp(){
document.removeEventListener('mouseup', MouseUp, false);
document.removeEventListener('mousemove', MouseMove, false);
var v_ClickElement = null, v_DragElement = null, v_yPos = null, v_xPos = null;
}
function MouseMove(){
event.preventDefault();
v_DragElement.style.top = event.clientY - v_yPos + 'px';
v_DragElement.style.left = event.clientX - v_xPos + 'px';
}
return {
Constructor:Constructor,
};
})();
cls_MouseDrag.Constructor('file_drag','my_file');
};