zpdrag.js
Summary
Zapatec Drag library. Used to drag elements. Requires utils.js.
Copyright (c) 2004-2007 by Zapatec, Inc.
http://www.zapatec.com
1700 MLK Way, Berkeley, California,
94709, U.S.A.
All rights reserved.
Zapatec.Drag = {};
Zapatec.Utils.emulateWindowEvent(['mousedown', 'mousemove', 'mouseup']);
Zapatec.Drag.currentId = null;
Zapatec.Drag.start = function(oEv, sId, oArg) {
if (Zapatec.Drag.currentId) {
return true;
}
var oEl = document.getElementById(sId);
if (!oEl || oEl.zpDrag) {
return true;
}
if (!oArg) {
oArg = {};
}
var oPos = Zapatec.Utils.getMousePos(oEv || window.event);
Zapatec.EventDriven.fireEvent('dragStart', {id: sId});
oEl.zpDrag = true;
oEl.zpDragPageX = oPos.pageX;
oEl.zpDragPageY = oPos.pageY;
if (oEl.offsetParent) {
var oPos = Zapatec.Utils.getElementOffset(oEl);
var oPosParent = Zapatec.Utils.getElementOffset(oEl.offsetParent);
oEl.zpDragLeft = oPos.left - oPosParent.left;
oEl.zpDragTop = oPos.top - oPosParent.top;
} else {
oEl.zpDragLeft = oEl.offsetLeft;
oEl.zpDragTop = oEl.offsetTop;
}
oEl.zpDragPrevLeft = oEl.zpDragLeft;
oEl.zpDragPrevTop = oEl.zpDragTop;
oEl.zpDragV = oArg.vertical;
oEl.zpDragH = oArg.horizontal;
oEl.zpDragLimTop =
typeof oArg.limitTop == 'number' ? oArg.limitTop : -Infinity;
oEl.zpDragLimBot =
typeof oArg.limitBottom == 'number' ? oArg.limitBottom : Infinity;
oEl.zpDragLimLft =
typeof oArg.limitLeft == 'number' ? oArg.limitLeft : -Infinity;
oEl.zpDragLimRgh =
typeof oArg.limitRight == 'number' ? oArg.limitRight : Infinity;
Zapatec.Drag.currentId = sId;
Zapatec.Utils.addEvent(document, 'mousemove', Zapatec.Drag.move);
Zapatec.Utils.addEvent(document, 'mouseup', Zapatec.Drag.end);
return true;
};
Zapatec.Drag.move = function(oEv) {
oEv || (oEv = window.event);
if (!Zapatec.Drag.currentId) {
return Zapatec.Utils.stopEvent(oEv);
}
var oEl = document.getElementById(Zapatec.Drag.currentId);
if (!(oEl && oEl.zpDrag)) {
return Zapatec.Utils.stopEvent(oEv);
}
var oPos = Zapatec.Utils.getMousePos(oEv);
var oOffset = {
id: Zapatec.Drag.currentId,
startLeft: oEl.zpDragLeft,
startTop: oEl.zpDragTop,
prevLeft: oEl.zpDragPrevLeft,
prevTop: oEl.zpDragPrevTop,
left: 0,
top: 0
};
if (!oEl.zpDragV) {
var iLeft = oEl.zpDragLeft + oPos.pageX - oEl.zpDragPageX;
if (oEl.zpDragLimLft <= iLeft && oEl.zpDragLimRgh >= iLeft) {
oEl.style.right = '';
oEl.style.left = iLeft + 'px';
oOffset.left = iLeft;
oEl.zpDragPrevLeft = iLeft;
} else {
oOffset.left = oOffset.prevLeft;
}
}
if (!oEl.zpDragH) {
var iTop = oEl.zpDragTop + oPos.pageY - oEl.zpDragPageY;
if (oEl.zpDragLimTop <= iTop && oEl.zpDragLimBot >= iTop) {
oEl.style.bottom = '';
oEl.style.top = iTop + 'px';
oOffset.top = iTop;
oEl.zpDragPrevTop = iTop;
} else {
oOffset.top = oOffset.prevTop;
}
}
Zapatec.EventDriven.fireEvent('dragMove', oOffset);
return Zapatec.Utils.stopEvent(oEv);
};
Zapatec.Drag.end = function(oEv) {
oEv || (oEv = window.event);
if (!Zapatec.Drag.currentId) {
return Zapatec.Utils.stopEvent(oEv);
}
var oEl = document.getElementById(Zapatec.Drag.currentId);
if (!(oEl && oEl.zpDrag)) {
return Zapatec.Utils.stopEvent(oEv);
}
Zapatec.Utils.removeEvent(document, 'mousemove', Zapatec.Drag.move);
Zapatec.Utils.removeEvent(document, 'mouseup', Zapatec.Drag.end);
var oOffset = {
id: Zapatec.Drag.currentId,
startLeft: oEl.zpDragLeft,
startTop: oEl.zpDragTop,
left: oEl.zpDragPrevLeft,
top: oEl.zpDragPrevTop
};
Zapatec.Drag.currentId = null;
oEl.zpDrag = null;
oEl.zpDragPageX = null;
oEl.zpDragPageY = null;
oEl.zpDragLeft = null;
oEl.zpDragTop = null;
oEl.zpDragPrevLeft = null;
oEl.zpDragPrevTop = null;
oEl.zpDragV = null;
oEl.zpDragH = null;
oEl.zpDragLimTop = null;
oEl.zpDragLimBot = null;
oEl.zpDragLimLft = null;
oEl.zpDragLimRgh = null;
Zapatec.EventDriven.fireEvent('dragEnd', oOffset);
return Zapatec.Utils.stopEvent(oEv);
};
Documentation generated by
JSDoc on Thu Apr 5 19:15:07 2007