Files
webthink/dragNDrop.js

97 lines
2.4 KiB
JavaScript
Raw Permalink Normal View History

2017-02-07 20:13:14 +00:00
// global instance is created here.
var dragNDrop=new mmDragHandler();
dragNDrop.extends(new Publisher());
function mmDragHandler(){
var m_dragObject;
var m_offsetX;
var m_offsetY;
var m_isDragging=false;
var m_zIndexSave;
var m_lastSeenNode=null;
var m_origX=null; // Position the mouse was pushed down.
var m_origY=null;
document.onmousemove = onMouseMoveHandler;
document.onmouseup = onMouseUpHandler;
this.onMouseDownHandler=onMouseDownHandler;
this.onMouseMoveHandler=onMouseMoveHandler;
this.onMouseUpHandler=onMouseUpHandler;
this.activateForObject=activateForObject;
function activateForObject(ele) {
ele.ondrag=function(){return false;};
ele.onselectstart=function(){return false;};
ele.onmousedown=onMouseDownHandler;
// if nothing else is mentioned in the object position it in the middle of the visible area.
if (ele.style.left=="") {
ele.style.left=((window.innerWidth/2) + window.scrollX) + "px";
}
if (ele.style.top=="") {
ele.style.top=((window.innerHeight/2) + window.scrollY) + "px";
}
ele.style.display="inline";
this.notifySubscribers(ele,"activateDragNDrop");
}
function onMouseDownHandler(e) {
if (window.event) e=window.event;
m_dragObject = e.target;
var dragX = parseInt(m_dragObject.style.left);
var dragY = parseInt(m_dragObject.style.top);
var mouseX = e.clientX;
var mouseY = e.clientY;
m_origX=mouseX;
m_origY=mouseY;
m_offsetX = mouseX - dragX;
m_offsetY = mouseY - dragY;
m_zIndexSave=m_dragObject.style.zIndex;
m_dragObject.style.zIndex=5;
m_dragObject.isDragging=true;
m_isDragging = true;
return(false);
}
function onMouseMoveHandler(e){
if (!m_isDragging) return;
if (window.event) e=window.event;
if (e.target.id.substring(0,6)=="mmNode") {
m_lastSeenNode=e.target;
}
if ((m_origX!=e.clientX)||(m_origY!=e.clientY)) {
dragNDrop.notifySubscribers(m_dragObject,"moving");
}
var newX = e.clientX - m_offsetX;
var newY = e.clientY - m_offsetY;
m_dragObject.style.left = newX + "px";
m_dragObject.style.top = newY + "px";
var addInfo=new Array();
addInfo[0]=newX;
addInfo[1]=newY;
return(false);
}
function onMouseUpHandler(e){
if (!m_isDragging) return;
m_dragObject.style.zIndex=m_zIndexSave;
m_dragObject.isDragging=false;
m_isDragging = false;
dragNDrop.notifySubscribers(m_dragObject,"endMoving",m_lastSeenNode);
return(false);
}
}